키 이름에 따라 HashMap에서 문자열 값 가져 오기


123

나는이 HashMap내가 하나 개의 값을 얻을 수있는 방법, 다양한 키와 값?

맵에라는 키 my_code가 있습니다. 문자열을 포함해야합니다. 맵을 반복 할 필요없이 어떻게 얻을 수 있습니까?

지금까지 ..

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

String"ABC"또는 "DEF"와 같은 을 볼 것으로 예상하고 있는데 처음에 입력 한 것이지만, System.out.println()이렇게하면 다음과 같은 결과가 나타납니다.java.lang.string#F0454

죄송합니다. 아마도 짐작할 수있는지도에 익숙하지 않습니다.)

답변:


166

그냥 사용 Map#get(key)?

Object value = map.get(myCode);

다음은 맵에 대한 자습서이며 유용 할 수 있습니다. http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

편집 : 다음과 같이 질문을 편집했습니다.

"ABC"또는 "DEF"와 같은 문자열을 처음에 넣을 것으로 예상하고 있지만 System.out.println ()을 수행하면 java.lang.string # F0454

죄송합니다. 아마도 짐작할 수있는지도에 익숙하지 않습니다.)

당신은의 결과를보고 Object#toString()있습니다. 그러나 이름에 소문자가 포함 된 사용자 지정 구현 java.lang.String을 만들지 않는 한에는 이미 하나가 구현 되어 있어야합니다 . 실제로 사용자 지정 개체 인 경우 원하는 개체에 대해 또는 작업을 수행 할 때마다 "사람이 읽을 수있는 문자열"을 가져 오도록 재정의해야 합니다. 예를 들면 :sjava.lang.stringObject#toString()System.out.println()toString()

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

1
물론 사용자 정의 문자열 클래스를 만드는 경우에는 (1) 그렇게하지 않는 것이 좋습니다. 왜냐하면 아마도 원하는 것이 아닐 수 있기 때문입니다. (2) 그렇게하려는 경우에는 java.lang 네임 스페이스.
MatrixFrog

1
if HashMap <String, String> newMap = new HashMap <String, String> (); 이것에서 문자열 요소를 얻는 방법 ...? 여기서 문자열 값 = newMap.get ( "my_code"); 오류 제공
saidesh kilaru

어떻게 반대로 할 수 있습니까? 가치에서 열쇠를 얻습니까?
대인 수수

58

키 / 값을 문자열로 저장하는 경우 다음과 같이 작동합니다.

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

문제는 HashMap (키 및 값)에 채워지는 항목입니다.


if HashMap <String, String> newMap = new HashMap <String, String> (); 이것에서 문자열 요소를 얻는 방법 ...? 여기서 문자열 값 = newMap.get ( "my_code"); 오류 제공
saidesh kilaru

11

Generics를 사용하고 맵을 다음과 같이 정의 할 경우

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

그런 다음 값을 다음과 같이 가져옵니다.

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

map.get ()을 typecast하거나 toString 메서드를 호출하여 String 값을 가져올 필요가 없습니다.


9

귀하의 질문은 전혀 명확하지 않습니다. 키에는 "이름"이 없습니다. 맵에 관한 한 아무 것도 "호출"되지 않습니다. 단지 키일 뿐이며 다른 키와 비교됩니다. 여러 종류의 키가있는 경우 온전함을 위해 다른 맵에 배치하는 것이 좋습니다.

이것이 도움이되지 않는다면 질문을 명확히 해주십시오. 의미하는 바를 보여주는 코드를 사용하는 것이 좋습니다.



6

여기서 주목해야 할 중요한 점은 키가 Java에서 사용자 정의 클래스의 객체 인 경우 equals 메서드를 재정의하는 지점으로 만드는 것입니다. HashMap.get (Object key) 메서드는 키 값을 일치시키기 위해 equals 메서드를 사용하기 때문입니다. equals 메소드를 재정의하지 않으면 키의 실제 값이 아닌 단순히 키 참조를 기반으로 값을 찾으려고 시도합니다.이 경우 항상 null을 반환합니다.


GR8 설명 이맘 :
요소

3

HashMap을 다음과 같이 선언했다고 가정합니다.

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

그러면 map의 key는 Character data type과 int type의 값이됩니다. 이제 key의 type, value type, syntax에 관계없이 key에 해당하는 값을 얻으려면 :-

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

따라서 질문에 따라 키에 해당하는 문자열 값을 얻고 싶습니다.이를 위해 HashMap을 HashMap < "datatype of key", "datatype of value"hs = new HashMap <> (); 이것을 사용하면 코드가 더 깔끔해지며 기본적으로 hs.get ( "my_code")의 결과를 문자열로 변환 할 필요가 없습니다. 입력시 값을 문자열로 유지하면 문자열 값을 반환합니다.


1

다음은 keySet (), get (), values ​​() 및 entrySet () 함수를 사용하여 맵에서 키와 값을 얻는 방법에 대한 또 다른 예입니다.

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());

0

HashMap에서 get (Object key) 메소드를 사용할 수 있습니다. 많은 경우에 키 클래스는 맵 키에 유용한 클래스가되기 위해 equals 메서드를 재정의해야합니다.


0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

키에 매핑 된 값 4DD

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.