예제 #1
0
 /**
  * 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>Despite the method name, this method attempts to avoid actually copying the data when it is
  * safe to do so. The exact circumstances under which a copy will or will not be performed are
  * undocumented and subject to change.
  *
  * @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;
     // TODO(lowasser): if we need to make a copy of a BiMap because the
     // forward map is a view, don't make a copy of the non-view delegate map
     if (!bimap.isPartialView()) {
       return bimap;
     }
   }
   return copyOf(map.entrySet());
 }