2014-02-07 48 views
0

我有一個問題,我正在嘗試解決。如果任何人都可以指出我認爲正確的方向,那就很好。我正在做的是建立一個名爲Info的課程,該課程只包含數據。這是一個字符串名稱,令牌類型等。該類在另一個類SymbolTable中。此類將數據添加到包含名稱:key和類Info:value的Hashtable中。哈希表和類數據

問題是我不知道如何從Hashtable值中檢索Info以外的數據。 我試着做一個toString的方法,但只是從類Info中吐出原始數據。

這裏是我的代碼:

public class SymbolTable { 
private Hashtable<String, Info> myTable = new Hashtable<String, Info>(); 


public void add(String name, IdInfoToken kind){ 
    Info valueInfo = new Info(); 
    valueInfo.symbol = name; 
    valueInfo.tokenKind = kind; 
    myTable.put(name, valueInfo); 
} 

public String toString(){ 
    String answer = " "; 
    answer += myTable; 
    return answer; 
} 


private class Info { 
    String symbol; 
    IdInfoToken tokenKind;  
}} 

回答

2

你會檢索,你把它以同樣的方式中的數據:通過密鑰。

我不知道是什麼的name值是您在傳遞到您的包裹add方法,但在本質上,這將是與此類似:

public Info retrieve(String name) { 
    return myTable.get(name); 
} 

而且這一點,除非你真的需要同步,使用Map<String, Info>接口與HashMap具體實現而不是Hashtable。這是Javadoc recommends at the bottom的事情之一。

+0

我試過了,但它只顯示'Info'類中的原始數據。這就是我得到的:符號表{car = [email protected],[email protected],[email protected]} – Tags

+0

這就是'Info'的內部'toString( )'方法。我不知道你是否正在實現它,或者如果它是其他的實現它,但是這個輸出來自於你調用'System.out.println(info);'的事實。如果它是您擁有的類,請重寫'toString()'並賦予其含義。如果它不是您擁有的類,請從中提取含義並打印,而不是盲目地調用'toString()'。 – Makoto

+0

嘿誠,感謝您的幫助。我創建的信息類在我提供的代碼中列出。 'Info'類在'HashTable'內。所以我不能只寫'Info.toString()'並打印數據。我可以但是如果我創建了'Info.getValue()',當類在'Hashtable'內時,我怎麼會調用這個方法? – Tags