2009-11-24 13 views
87

Tengo un HashMap con varias claves y valores, ¿cómo puedo obtener un valor?obtener el valor de cadena de HashMap dependiendo del nombre de la clave

Tengo una clave en el mapa llamada my_code, debe contener una cadena, ¿cómo puedo obtenerla sin tener que recorrer el mapa?

Hasta ahora tengo ..

HashMap newMap = new HashMap(paramMap); 
    String s = newMap.get("my_code").toString(); 

Estoy esperando ver una String, tales como "ABC" o "DEF" ya que es lo que puse ahí al principio, pero si Haga una System.out.println() me sale algo así como java.lang.string#F0454

lo sentimos, no estoy muy familiarizado con los mapas como que es fácil adivinar;)

Respuesta

118

sólo tiene que utilizar Map#get(key)?

Object value = map.get(myCode); 

Aquí hay un tutorial sobre los mapas, puede que le resulte útil: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html.

Editar: ha editado su pregunta con lo siguiente:

Estoy esperando ver una cadena, como "ABC" o "DEF" ya que es lo que puse ahí inicialmente , pero si hago un System.out.println() me sale algo así como java.lang.String # F0454

lo sentimos, no estoy muy familiarizado con los mapas como que es fácil adivinar;)

Estás viendo el resultado de Object#toString(). Pero el java.lang.String ya debería tener uno implementado, a menos que haya creado una implementación personalizada con una minúscula s en el nombre: java.lang.string. Si es realmente un objeto personalizado, debe anular Object#toString() para obtener una "cadena legible por humanos" cada vez que realice un System.out.println() o toString() en el objeto deseado. Por ejemplo:

@Override 
public String toString() { 
    return "This is Object X with a property value " + value; 
} 
+0

Por supuesto, si está creando una clase de cadena personalizada, recomendaría (1) no hacer eso, ya que probablemente no es lo que quiere hacer, y (2) si va a hacer eso, NO ponga en el espacio de nombres java.lang. – MatrixFrog

+1

si HashMap newMap = new HashMap (); cómo obtener un elemento de cuerda de esto ...? donde String value = newMap.get ("my_code"); da error –

+0

¿cómo se puede invertir? obtener la clave del valor? – delive

7

Su pregunta no está del todo clara, me temo. Una clave no tiene un "nombre"; no se "llama" nada en lo que se refiere al mapa; es solo una clave, y se comparará con otras claves. Si tiene muchos tipos diferentes de claves, le sugiero encarecidamente que las coloque en diferentes mapas en aras de la cordura.

Si esto no ayuda, aclare la pregunta, preferiblemente con algún código para mostrar lo que quiere decir.

5

map.get(myCode)

0

Se puede utilizar el método get (Object key) de la HashMap. Tenga en cuenta que en muchos casos su Key Class debe anular el método equals, para ser una clase útil para una clave Map.

47

Si va a guardar las llaves/valores como cadenas, entonces esto va a trabajar:

HashMap<String, String> newMap = new HashMap<String, String>(); 
newMap.put("my_code", "shhh_secret"); 
String value = newMap.get("my_code"); 

La cuestión es qué se rellena en el HashMap (clave & valor)

+0

si HashMap newMap = new HashMap (); cómo obtener un elemento de cuerda de esto ...? donde String value = newMap.get ("my_code"); da error –

8

Si va a utilizar medicamentos genéricos y definir su mapa como

Map<String,String> map = new HashMap<String,String>(); 

luego ir a buscar valor como

String s = map.get("keyStr"); 

que no será necesario que el encasillado map.get() o llamar al método toString para obtener valor de cadena

4

Un punto importante a señalar aquí es que si la clave es un objeto de la clase definida por el usuario en java luego haga un punto para anular el método de igualdad. Debido a que el método HashMap.get (clave Object) utiliza el método equals para hacer coincidir el valor clave. Si no anula el método equals, intentará encontrar el valor simplemente en función de la referencia de la clave y no del valor real de la clave, en cuyo caso siempre devolverá un valor nulo.

+0

gr8 explicación mam :) – eLemEnt

0

Supongamos que usted declaró HashMap como: -

HashMap<Character,Integer> hs = new HashMap<>(); 

Luego, clave en el mapa es del tipo de datos de tipo carácter y el valor de int type.Now, para obtener el valor correspondiente a directivos de cualquier tipo de clave, valor tipo, la sintaxis es la siguiente: -

char temp = 'a'; 
    if(hs.containsKey(temp)){ 
`  int val = hs.get(temp); //val is the value corresponding to key temp 
    } 

Así, de acuerdo a su pregunta que desea obtener valor de cadena que corresponde a una key.For esto, sólo declarar como HashMap HashMap < "tipo de datos de la clave", "tipo de datos de valor" hs = new HashMap <>(); Al usar esto hará que su código sea más limpio y también no tiene que convertir el resultado de hs.get ("my_code") en cadena ya que de manera predeterminada devuelve el valor de la cadena si al ingresar se ha mantenido el valor como una cadena.

Cuestiones relacionadas