No entiendo por qué necesitarías java Collections singletonMap . ¿Es útil en aplicaciones multiproceso?
java
collections
map
usuario710818
fuente
fuente
SingletonMap
así que lo edité. Desde entonces he revertido mis cambios;)Respuestas:
Básicamente, te permite hacer esto:
En vez de esto:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>(); m.put(key, value); callAPIThatTakesAMap(m);
que es mucho mejor cuando solo tiene un par clave / valor. Esta situación probablemente no se presenta muy a menudo, pero
singleton()
ysingletonList()
bastante frecuencia puede ser útil.fuente
Es útil si necesita pasar un mapa a algún código general (como un parámetro o como resultado de un método) y lo sabe en este caso particular, pero quizás no en otros casos que pasan el mapa al mismo código general. código: el mapa que desea pasar solo tiene una clave. En ese caso, SingletonMap es más eficiente que una implementación de mapa completa, y también más conveniente para el programador porque todo lo que necesita decir se puede decir en el constructor.
fuente
Además, una implementación de SingletonMap devuelta por Collections.singletonMap () tiene una huella de memoria más pequeña que un HashMap normal. Solo tiene que contener dos campos miembros: la clave y el valor, mientras que un HashMap mantiene una matriz interna de objetos Node más otros campos miembros. Entonces, si está creando muchos de estos mapas en la memoria, sería una opción prudente utilizar Collections.singletonMap ().
fuente
Es principalmente por conveniencia y abstracción. Algunas API toman a
Collection
como argumento y es bueno tener una forma sencilla de convertir objetos enSet
oMap
.singletonMap()
y ensingletonList()
realidad se introdujeron despuéssingletonSet()
en Java 1.3 porquesingletonSet()
resultó ser útil.fuente
muchas respuestas te dijeron cuándo, pero quiero señalar cuándo
not use it
no lo uses si quieres
put items later on
,porque poner implementación de
singletonMap
will throwUnsupportedOperationException
fuente
Este es solo otro ejemplo, pero escribí esta línea de código:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception { return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results)); }
tenga en cuenta el
@Override
. La interfaz de manera más general puede tomar mapas de muchas cosas; esta instanciación particular siempre devuelve un mapa que contiene una cosa. También tenga en cuenta que la clave del mapa es una enumeración. Por lo tanto, se supone que los mapas nunca deben ser grandes, solo se supone que deben contener los resultados de las acciones que se especifiquen. En mi ejemplo real, hay hasta 5 acciones, y esta instanciación solo usa una de ellas.Para ser completo,
EnumSet
o aEnumMap
menudo es apropiado en estos casos, pero aún son molestos en comparación con el código anterior.fuente