Java - 地图或关键对象内的地图?

时间:2013-02-14 09:16:50

标签: java

您好我有3个属性(String)来识别某个Object。

什么是更好的解决方案:

使用关键对象作为PierreJoachim Sauer的帖子,如下所示:

public class MyKey{

private String one;
private String two;
private String three;

public MyKey(Sting one,String two, String three){
    this.one=one;
    this.two=two;
    this.three=three;
}

//getter only

@Override
public int hashcode(){
// creating Hashcode
}

@Override
public boolean equals(Object o){
// comparing
}
}

=&GT; Map<MyKey, Object>

或在地图内使用地图内的地图:

=&GT; Map<String, Map<String, Map<String, Object>>>

5 个答案:

答案 0 :(得分:2)

我认为你应该选择第一个选项。原因是它更干净,更灵活。想象一下,你需要在你的密钥中添加一个额外的元素几个月后,你的结构现在将无效,因为它需要更多级别的嵌套,更不用说使其更复杂。

答案 1 :(得分:1)

我会按照您的指定使用密钥类。它更清晰,并且具有能够命名键的优点。

答案 2 :(得分:0)

你说

  

我有3个属性(String)来识别a   某些对象。

这立刻向我表明你的密钥由三个字符串组成,你的第一个解决方案是正确和直观的。

答案 3 :(得分:0)

如果您总是需要3个键,则出于性能原因应使用密钥对象(元组-3)。一个对象来统治它们...... 如果你想要更好的并发性,你也可以将每个关键字段设为最终字段(你甚至可以预先计算哈希...)

答案 4 :(得分:0)

只需实现等于

one.equals(o) || two.equals(o) || three.equals(o)

和hashcode

one.hashCode() ^ two.hashCode() ^ three.hashCode()