【问题标题】:Java - Maps inside a Map or Key Object?Java - 地图或关键对象内的地图?
【发布时间】:2021-02-05 23:28:31
【问题描述】:

您好,我有 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>>>

【问题讨论】:

  • 你都试过了吗?哪一个感觉更舒服?
  • 当然第一种方式更好。当涉及到泛型参数类型的嵌套时,您永远不应该超过两个层次。
  • @Rohit - 从来没有?曾经吗?

标签: java


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你说

      我有 3 个属性(字符串)用于识别 某个对象。

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

      【讨论】:

        【解决方案4】:

        只需实现等于

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

        和哈希码

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2014-01-04
            • 1970-01-01
            • 1970-01-01
            • 2021-12-03
            • 2011-03-16
            • 1970-01-01
            • 2015-03-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多