funciona ejemplo como java map

java - ejemplo - linkedhashmap como funciona



¿Existe una implementación de Java Map que imponga las claves finales? (2)

No hay tal implementación en el JDK. Tu mejor apuesta aquí es usar la composición:

public final class CustomMap<K, V> implements Map<K, V> { private final Map<K, V> delegate; public CustomMap(final Map<K, V> delegate) { this.delegate = delegate; } @Override public V put(final K key, final V value) { // Can''t use the return value of delegate.put(), since some implementations // allow null values; so checking delegate.put() == null doesn''t work if (delegate.containsKey(key)) throw new IllegalArgumentException("duplicate key: " + key); return delegate.put(key, value); } @Override public void putAll(@Nonnull final Map<? extends K, ? extends V> m) { for (final Entry<? extends K, ? extends V> entry: m.entrySet()) put(entry.getKey(), entry.getValue()); } // delegate all other methods }

De lo contrario, como otros sugirieron, si usa Guava, use ForwardingMap; Esta es esencialmente una versión generalizada del código anterior.

De hecho, utilice guayaba.

otra nota: no puedes simplemente // throws some exception aquí; Map .put() no declara lanzar ninguna excepción, por lo que su única opción es lanzar una excepción no marcada aquí.

Necesito un Map , que una vez que una clave obtiene un valor, cualquier intento adicional de poner un valor en la misma clave generará una excepción.

Por ejemplo:

map.put("John", 3); //OK map.put("John", 7); // throws some exception map.put("John", 11); // throws some exception

Por supuesto, puedo implementar esto por mi cuenta (p. Ej., Extendiendo HashMap , o rodeando cada llamada para put con if map.contains(key) ), pero prefiero usar algo ya hecho que mantenga limpio mi código.

¿Alguien sabe de tal implementación?


ImmutableMap clase ImmutableMap en las bibliotecas Java de Google (Guava) es la solución que está buscando. Desea claves finales, lo que implica que los valores en su mapa también serán finales. Y puedes construir tu mapa así:

ImmutableMap<String,Integer> myMap = ImmutableMap.<String, Integer>builder() .put("john", 3) .put("rogerio", 5) .put("alfonso", 45) .put("leonidas", 577) .build();