2012-04-29 92 views
1

我必須設計一個函數,它將輸入一個關鍵字並輸出一個類別ID。 例如:在Java中映射數據結構

f('dog') returns _ANIMAL 
f('chair') returns _FURNITURE 

我已經有了映射,我可以每次只需遍歷標籤數組,但我有一種感覺,這是不是最好的解決辦法。

在Java庫中是否有特殊的數據結構(我在考慮三元搜索樹)用於此特定任務?我應該只使用HashMap(或可能設置(因爲有幾個類別))?

P.S.這個映射是固定的,我不需要在構建它時添加或刪除元素。

+0

當你的映射是固定的,那麼你可以考慮使用'enum'。在那裏你可以定義你的密鑰,每個密鑰都可以有你的映射的getter。 – Gaim 2012-04-29 09:23:35

回答

3

如果我理解正確,那麼HashMap聽起來就像你想要的。你不希望每次迭代整個數組,因爲有很多函數調用和/或一個大數組,你的程序會慢慢地運行。使用HashMap,從關鍵字(關鍵字)拉出一個值(您的類別)或多或少會立即發生,並且持續時間不變。

可以建立映射是這樣的:

​​

然後map.get("dog")返回 「動物」,map.get("chair")返回 「傢俱」。

正如其他人已經表明的那樣,枚舉可以很好地工作(並且速度稍微快一些) - 但要注意的是,它們在編譯時是固定的,因此在執行期間不能更改。

+0

準確地說,加上製作類別枚舉將會很好 – 2012-04-29 09:57:28

+0

map.get(「chair」)返回「cat」? – 2012-04-29 10:51:07

0

你可以改變你enum類似如下:

public enum Things{ 
    _ANIMAL("Dog"), _FURNITURE("Animal"); 
    private String description; 
    Things(String description){ 
     this.description= description; 
    } 
    public String toString(){ 
     return description; 
    } 
}; 

每當你想找回你的枚舉的字符串表示,只需撥打toString

例子:

Things._ANIMAL.toString()將輸出"Dog"

+0

我認爲你應該爲你的代碼反轉eum值和descrption來匹配問題:_Dog(「Animal」),_Chair(「FURNITURE」);類別可能有更多實例。此外,我認爲可能更好使用第二枚枚舉來表示項目。 – 2012-04-29 10:20:54

+0

@AndreaParodi感謝您的評論。這個'_Dog(「Animal」)聽起來不像OP的問題,_Animal是一個枚舉而不是一個字符串 – GETah 2012-04-29 10:29:19