Pregunta

Necesito almacenar clave/valor de la información en algún tipo de colección.En C#, me gustaría definir un diccionario como este:

var entries = new Dictionary<string, int>();
entries.Add("Stop me", 11);
entries.Add("Feed me", 12);
entries.Add("Walk me", 13);

A continuación, me gustaría tener acceso a los valores así:

int value = entries["Stop me"];

¿Cómo puedo hacer esto en Java?He visto ejemplos con ArrayList, pero me gustaría que la solución con medicamentos genéricos, si es posible.

¿Fue útil?

Solución

Desea utilizar un Map

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Stop me", 11);
Integer i = m.get("Stop me"); // i == 11

Tenga en cuenta que en la última línea, yo podría haber dicho:

int i = m.get("Stop me");

Que es la abreviatura de (con Java auto-unboxing):

int i = m.get("Stop me").intValue()

Si no hay ningún valor en el mapa a la clave dada, la get devuelve null y esta expresión lanza un NullPointerException.Por lo tanto, es siempre una buena idea utilizar el caja tipo Integer en este caso

Otros consejos

Use un java.util.Map. Hay varias implementaciones:

  • HashMap: O (1) búsqueda, no mantiene el orden de las teclas
  • TreeMap: búsqueda O (log n), mantiene el orden de las claves, para que pueda iterar sobre ellas en un orden garantizado
  • LinkedHashMap: búsqueda O (1), itera sobre las teclas en el orden en que se agregaron al mapa.

Los usas como:

Map<String,Integer> map = new HashMap<String,Integer>();
map.put("Stop me", 11);
map.put("Feed me", 12);

int value = map.get("Stop me");

Para mayor comodidad al trabajar con colecciones, eche un vistazo a la biblioteca de colecciones de Google . Es excelente.

Utiliza un Map en Java.

Tenga en cuenta que no puede usar int (o cualquier otro tipo primitivo) como parámetro de tipo genérico, pero debido al autoboxing, todavía se comporta casi como si fuera un Map<String, int> en lugar de un Map<String, Integer>. (Sin embargo, no querrá hacer mucho autoboxing en código sensible al rendimiento).

Map<String, Integer> entries = new HashMap<String, Integer>();
entries.put("Stop me", 11);
entries.put("Feed me", 12);
entries.put("Walk me", 13);
int value = entries.get("Stop me"); // if you know it exists
// If you're not sure whether the map contains a value, it's better to do:
Integer boxedValue = entries.get("Punch me");
if (boxedValue != null) {
    int unboxedValue = boxedValue;
    ...
}

Parece que está buscando algo como HashMap

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("Stop Me", 11);
map.put("Feed Me", 12);
map.put("Walk Me", 13);
Integer x; // little hack
int value = (x = a.get("aaa")) == null? 0 : x;

como alternativa puedes probar Enum:

enum Action {

    STOP(11),
    FEED(12),
    WALK(13);

    private final int value;

    private Action(int value) {
        this.value = value;
    }

    public int value() {
        return value;
    }

    public static Action valueOf(int value) {
        for (Action action : values()) {
            if (action.value == value) {
                return action;
            }
        }

        return null; // or a null-object
    }
}

prueba:

public void action() {
    Action action = Action.valueOf("FEED"); 
    // or Action.FEED for more compile-time safety
    int value = action.value();
    // instantiating by code 
    Action walk = Action.valueOf(13);
}

Definitivamente desea un HashMap, que es la versión Java de C # Dictionary.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top