No entiendo por qué necesitaría colecciones de Java singletonMap? ¿Es útil en aplicaciones multiproceso?¿Cuándo usaría Java collections singletonMap method?
Respuesta
Básicamente, se le permite hacer esto:
callAPIThatTakesAMap(Collections.singletonMap(key, value));
en lugar de esto:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>();
m.put(key, value);
callAPIThatTakesAMap(m);
que es mucho más agradable cuando sólo tiene un único par clave/valor. Esta situación probablemente no surja con mucha frecuencia, pero singleton()
y singletonList()
pueden ser bastante útiles.
Utilizo singletonMap todo el tiempo en DAO que usa Spring's Named Parameter JDBC Template. Si tiene una instrucción simple de selección como "select foo from bar where id =: barId", entonces necesitaría un mapa de parámetros con un solo par clave-valor, barID = 123. Ese es un gran lugar para usar singletonMap(). – spaaarky21
Si alguna API toma el mapa como entrada y estoy usando Collections.singleton (clave, valor), entonces estoy pasando un mapa inmutable, lo que podría no ser bueno para esa API, porque puede ser que la API agregue más elementos a este mapa, y en este caso, no se puede hacer nada, ya que es inmutable. – AKS
@AKS: en teoría sí, pero en la práctica el acceso de solo lectura es mucho más común, y debe quedar claro a partir de la documentación de la API si las entradas se agregan a un mapa pasado como parámetro. –
Es útil si necesita pasar un mapa a un código general (como un parámetro, o como resultado de un método) y usted sabe que en este caso particular, pero quizás no en otros casos que pasan el mapa con el mismo código general: el mapa que quiere pasar solo tiene una clave. En ese caso, SingletonMap es más eficiente que una implementación de mapa en toda regla, y también más conveniente para el programador porque todo lo que necesita decir se puede decir en el constructor.
nice explanation –
Es principalmente por conveniencia y abstracción. Algunas API toman como argumento Collection
y es bueno tener una forma simple de convertir objetos a Set
o Map
.
singletonMap()
y singletonList()
se introdujeron realmente después de singletonSet()
en Java 1.3 porque singletonSet()
demostró ser útil.
No hay un método singletonSet(), simplemente se llama singleton() –
Esto es sólo un ejemplo, pero escribió esta línea de código:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception {
return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results));
}
nota del @Override
. La interfaz en 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 un Enum. Por lo tanto, se supone que los mapas no son grandes, se supone que contienen los resultados de las acciones especificadas. En mi ejemplo real, hay hasta 5 acciones, y esta instanciación solo usa una de ellas.
Para completar, EnumSet
o es a menudo apropiado en estos casos, pero esos siguen siendo molestamente prolijo en comparación con el código anterior.
Además, una implementación de SingletonMap devuelta por Collections.singletonMap() tiene una huella de memoria más pequeña que una HashMap normal. Solo debe contener dos campos de miembros: la clave y el valor, mientras que un HashMap mantiene una matriz interna de objetos de nodo más otros campos de miembros. Por lo tanto, si está creando un lote de estos mapas en la memoria, sería una elección prudente usar Collections.singletonMap().
muchas respuestas que dijeron cuando, pero quiero señalar cuándo not use it
no lo use si quieres put items later on
,
debido a la aplicación de venta de singletonMap
tirará UnsupportedOperationException
- 1. Groovy map method of collections
- 2. Cuándo usaría mmap
- 3. Multithreading: ¿Cuándo usaría un Join?
- 4. Java Collections y Garbage Collector
- 5. ¿Cuándo usaría un Dominio de aplicación?
- 6. ¿Cuándo usaría XML sobre JSON para Ajax?
- 7. ¿Cuándo usaría XML en lugar de SQL?
- 8. Twisted, gevent eventlet - Cuándo los usaría
- 9. ¿Cuándo usaría un delegado en asp.net?
- 10. ¿Cuándo y por qué usaría Apache commons-digester?
- 11. Cuándo usaría el patrón de diseño de mediador
- 12. ¿Cuándo nos usaría Ext.application() vs. Ext.Loader.setConfig, .require y .onReady?
- 13. ¿Cuándo usaría AutoResetEvent y ManualResetEvent en lugar de Monitor.Wait()/Monitor.Pulse()?
- 14. ¿Por qué alguien usaría Collections.emptyList en java?
- 15. ¿Cuándo debería usar @classmethod y when def method (self)?
- 16. Java collection/map apply method equivalent?
- 17. JavaScript Collections API?
- 18. Por qué Java Collections API no tiene implementación de árbol
- 19. ¿Por qué Java Collections no almacena directamente tipos de primitivos?
- 20. Big-O resumen de las implementaciones de Java Collections Framework?
- 21. C#/.NET equivalente para Java Collections. <T> emptyList()?
- 22. Colecciones Java: ¿qué colección usar y cuándo?
- 23. python __get__ method
- 24. ¿Dónde usaría C# Runtime Compilation?
- 25. Usando [self method] o @selector (method)?
- 26. C# business objects and collections
- 27. Google Collections ImmutableMap iteration order
- 28. Uso de Google-collections MapMaker?
- 29. Triangle Draw Method
- 30. Factory Method
@skaffman: Eso sería malo. Al principio, pensé que el OP se estaba refiriendo a la clase de Commons 'SingletonMap', así que lo edité.Desde entonces, he revertido mis cambios;) – tskuzzy