在Java中映射数据结构

在Java中映射数据结构

问题描述:

我必须设计一个函数,它将输入一个关键字并输出一个类别ID。 例如:在Java中映射数据结构

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

我已经有了映射,我可以每次只需遍历标签数组,但我有一种感觉,这是不是最好的解决办法。

在Java库中是否有特殊的数据结构(我在考虑三元搜索树)用于此特定任务?我应该只使用HashMap(或可能设置(因为有几个类别))?

P.S.这个映射是固定的,我不需要在构建它时添加或删除元素。

+0

当你的映射是固定的,那么你可以考虑使用'enum'。在那里你可以定义你的密钥,每个密钥都可以有你的映射的getter。 – Gaim 2012-04-29 09:23:35

如果我理解正确,那么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

你可以改变你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