您好我有3个属性(String)来识别某个Object。
什么是更好的解决方案:
使用关键对象作为Pierre和Joachim 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>>>
答案 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()