2009-02-26 12 views
1

Bir hashtable ile yinelenen ve bir dize olarak döndüren bir yöntem oluşturmaya çalışıyorum, bunun için en iyi yolu nedir?HashTable İçinde Bulmak için Yöntem

DÜZENLEME: Ben daha açık hale olmasaydı comment Maalesef

kopyalanmış, ben Java ile bunun çalışıyorum. Ben bir test sınıfı oluşturduk

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()); 
    } 
} 

ben değerini

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

Ben Tereyağı aradığı anahtar arar ve döndüren bir yöntem oluşturduk

 
Butter 50 
Beans 40 

çıkarır Fasulye için baktığımda 50 değerini döndürür 50

+0

? Şimdiye kadar ne denediniz, ve nasıl çalışmıyor? Daha fazla bilgi, lütfen! –

+1

Neden bunun üzerinde yineliyorsunuz? Bu bir hash tablosu, aramalar hashing yoluyla gerçekleştirilir ... –

+0

Lütfen daha fazla detay verin. –

cevap

4

Kurulum:

Bir anahtar Verilen
final Object sentinal = new Object(); 


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

, bir değer (arama) bulmak: (ters araması) o anahtar bulmak,

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

bir değer Verilen:

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

... gerçi ben eğer düzenli geriye doğru aramalar yapmak zorundayım, genellikle bir ters haritayı yapıyorum:

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

Daha net hale getirmek için bunu Java'da yapmaya çalışıyorum. Ben bir test sınıfı oluşturduk

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()); 
    } 
} 

ben değerini

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

ben bakmak bir anahtar arar ve döndüren bir yöntem oluşturduk

Butter 50 
Beans 40 

çıkarır Tereyağlıya baktığımda 50 döndürdüğünde Fasulye veriliyorsa, o zaman o 50

+0

'u kullanabilirsiniz. Hala neyi başarmaya çalıştığınızı anlamıyorum. – pgras

7

Ödev ver gibi görünüyor n örnek veri ("Tereyağı", "Fasulye") ...

Örneğinizde findValue, her zaman harita/tabloda İLK ANAHTARI verir. Yaptığınız anahtarı (Name) bile kullanmıyorsunuz. İşte sorununuzu gideren, haritaları yanlış şekilde kullandığınızı düşündüğünüz bir örnek.

daha iyi bir yol bunu yapmak için:

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

seni örnek, sabit:

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

, aslında her yerde Adı parametresini kullanarak değiliz kod ikinci pasajı bakarak. Yani olan şey şu ki, döngü etrafında ilk kez, girişin değeri döndürülür - ve ilk değer 50 olur.

Sen girişin anahtarı aslında değerine göre önemli zamanlardır verimli değil almak döngü Kullanma ...

0

aradığınız isim eşittir olmadığını kontrol etmek gerekir !! ve HashTable'dan yararlanamazsınız.

Düz ve ters dönüş için hashtable kullanmak istediğiniz için iki hashtables kullanabilirsiniz. Tablo1 (anahtar, değer) Tablo2 (değer, anahtar)

//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")); 

Çıktı


Tereyağı

İade etmek istiyorsun anahtar