-1

嗨,我有 3 个属性(字符串)需要识别某个对象。

什么是更好的解决方案:

使用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
}
}

=>Map<MyKey, Object>

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

=>Map<String, Map<String, Map<String, Object>>>

4

5 回答 5

2

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

于 2013-02-14T09:20:17.800 回答
1

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

于 2013-02-14T09:19:27.243 回答
0

你说

我有识别某个对象所需的 3 个属性(字符串)。

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

于 2013-02-14T09:19:38.850 回答
0

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

于 2013-02-14T09:19:41.367 回答
0

只需实现等于

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

和哈希码

one.hashCode() ^ two.hashCode() ^ three.hashCode()
于 2013-02-14T09:22:47.993 回答