2009-02-26 2 views
1

해시 테이블을 반복하고 해당 키를 문자열로 반환하는 메서드를 만들려고합니다.이 문제를 해결하는 가장 좋은 방법은 무엇입니까?HashTable에서 키를 찾을 수있는 방법

편집 : 나는 더 명확하게하지 않은 경우 주석 죄송합니다

에서 복사, 나는 자바에서이 작업을 수행하기 위해 노력하고있어. 내가 테스트 클래스를 생성 한

public void runprog() { 
    hashMap.put("Butter", 50); 
    hashMap.put("Beans", 40); 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     System.out.println(entry.getKey() + " " + entry.getValue()); 
    } 
} 

그것은 내가 값

public Object findValue(String Name){ 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     return entry.getValue(); 
    } 
    return null; 
} 

나는 버터를 찾아 키를 찾습니다 및 반환하는 방법을 만들었습니다

 
Butter 50 
Beans 40 

출력 50을 반환하면 반환하는 콩을 반환합니다.

+0

? 지금까지 시도한 것은 무엇이며 어떻게 작동하지 않습니까? 더 많은 정보를주세요! –

+1

왜 반복하고 있습니까? 그것은 해시 테이블, 조회는 해싱을 통해 수행됩니다 ... –

+0

더 자세히 설명하십시오. –

답변

4

설정 :

핵심 주어
final Object sentinal = new Object(); 


    Map<String, Object> map = new HashMap<String, Object>(){{ 
     put("key1", new Object()); 
     put("key2", sentinal); 
    }}; 

, 값 (조회) 찾기 : (역방향 조회)이 열쇠 찾기,

System.out.println(map.get("key2") == sentinal); 

값을 감안할를 :

for(Map.Entry<String, Object> entry : map.entrySet()){ 
     if(entry.getValue() == sentinal){ 
      System.out.println(entry.getKey()); 
     } 
    } 

을 ...하지만 나는 경우 정기적 인 역방향 조회를 수행해야합니다, 나는 일반적으로 역방향지도를 구축 :

Map<Object, String> reverse = new HashMap<Object, String>(); 
    for(Map.Entry<String, Object> entry : map.entrySet()){ 
     reverse.put(entry.getValue(), entry.getKey()); 
    } 
    System.out.println(reverse.get(sentinal)); 
0

미안하지만, 더 명확하게, 나는 자바에서 이것을하려고 노력하고있다. 내가 테스트 클래스를 생성 한

public void runprog() { 
    hashMap.put("Butter", 50); 
    hashMap.put("Beans", 40); 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     System.out.println(entry.getKey() + " " + entry.getValue()); 
    } 
} 

그것은 내가 값

public Object findValue(String Name){ 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 
     return entry.getValue(); 
    } 
    return null; 
} 

내가 찾아 키를 찾습니다 및 반환하는 방법을 만들었습니다

Butter 50 
Beans 40 

를 출력 버터 50을 반환하면 내가 찾는 콩을 찾는다.

+0

아직 달성하려는 것을 이해하지 못합니다 ... – pgras

7

숙제처럼 보인다. 예제 데이터 ("Butter", "Beans") ...

예제에서 findValue는 매번 맵/테이블에서 FIRST KEY를 반환합니다. 당신은 당신이 넣은 키 (Name)를 사용하지 않고 있습니다. 당신의 문제를 해결하는 예제가 있습니다. 당신이 모든 잘못된 방식으로 맵을 사용하고 있다고 생각합니다.

더 좋은 방법은이 작업을 수행합니다 :

// assume Name is your key, ex. "Butter" 
// No need to iterate since maps are designed for lookup 
Object value = map.get(Name); 

귀하의 예를 들어, 고정 :

public Object findValue(String Name){ 
    for (Object o: hashMap.entrySet()) { 
     Map.Entry entry = (Map.Entry) o; 

     // THIS IS THE IMPORTANT LINE 
     if(entry.getKey().equals(Name)) 
     { 
      return entry.getValue(); 
     } 
    } 
    return null; 
} 
1

, 당신이 실제로 어디 Name 매개 변수를 사용하지 않는 코드의 두 번째 조각에서 찾고있다. 따라서 루프를 처음으로 시작할 때 항목의 값이 반환되고 첫 번째 값은 50이됩니다.

당신은 항목의 키가 실제로 당신이 값을 기준으로 키 시간 effecient하지 얻을 루프 사용을 위해 ...

0

찾고있는 이름이 같은지 여부를 확인해야합니다! 당신은 HashTable의 혜택을받지 못합니다.

따라서 직선 및 역방향 검색에 해시 테이블을 사용하려는 경우 두 개의 해시 테이블을 사용할 수 있습니다. 표 (키, 값) 표 2 (값, 키)

//Table1 
hashtable1.put("Butter", 50); 
hashtable1.put("Beans", 40); 

//Table2 
hashtable2.put(50, "Butter"); 
hashtable2.put(40, "Beans"); 

//Retrieving by key 
System.out.println(hashtable1.get(50)); 

//Retrieving by value 
System.out.println(hashtable2.get("Butter")); 

출력


버터

50

반환 할 않는 키
관련 문제