【问题标题】:Mapping data structure in JavaJava中的映射数据结构
【发布时间】:2012-05-09 09:33:03
【问题描述】:

我必须设计一个函数,将关键字作为输入并输出类别 ID。 例如:

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

我已经有了映射,每次都可以遍历标签数组,但我觉得这不是最好的解决方案。

Java 库中是否有针对此特定任务的特殊数据结构(我正在考虑三元搜索树)?我应该只使用 HashMap(或者 Set(因为类别很少))吗?

附:这个映射是固定的,一旦构建完成,我不需要添加或删除元素。

【问题讨论】:

  • 当您的映射固定后,您可以考虑使用enum。在那里你可以定义你的键,每个键都可以为你的映射设置 getter。

标签: java string data-structures mapping hashmap


【解决方案1】:

如果我对您的理解正确,那么 HashMap 听起来正是您想要的。您不想每次都遍历整个数组,因为有许多函数调用和/或大型数组,您的程序最终会运行缓慢。使用 HashMap,从键(您的关键字)中提取一个值(您的类别)或多或少会在恒定时间内立即发生。

你可以这样构建地图:

HashMap map = new HashMap();
map.put("dog", "animal");
map.put("chair", "furniture");
map.put("cat", "animal");

然后map.get("dog") 返回“动物”,map.get("chair") 返回“家具”。

正如其他人所指出的,枚举也可以很好地工作(而且速度会稍微快一点)——但需要注意的是,它们在编译时是固定的,因此在执行期间无法更改。

【讨论】:

  • 没错,加上进行类别枚举会很好
  • map.get("chair") 返回“猫”?
【解决方案2】:

您可以更改您的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"

【讨论】:

  • 我认为您应该反转 eum 值和代码以匹配问题:_Dog("Animal"), _Chair("FURNITURE");类别可能有更多实例。另外,我认为使用第二个枚举来表示项目可能会更好。
  • @AndreaParodi 感谢您的评论。这 _Dog("Animal") 听起来不像 OP 的问题那样正确,_Animal is an enum not a string
猜你喜欢
  • 2012-11-26
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
相关资源
最近更新 更多