【问题标题】:How to create a 2D map in Java?如何在 Java 中创建 2D 地图?
【发布时间】:2011-01-30 19:46:40
【问题描述】:

我想要一个将两个字符串映射为一个字符串的映射。例如:map["MainServer","Status"] 返回“活动”。在Java中最好的方法是什么。我应该使用包含另一个 HashMap 作为其元素的 HashMap 吗?

【问题讨论】:

    标签: java map multidimensional-array 2d associative-array


    【解决方案1】:

    映射到映射意味着您正在进行双重查找(语义和成本方面)。 这是你真正想要的吗?

    您最好定义一个包含 X 字符串的 MapKeyPair 类,并为它们覆盖 equals 和 hashCode。

    更一般地说,如果这对具有实际含义或抽象,则通过适当命名的对象来表示它。

    【讨论】:

    • +1,基本上你想将两个字符串作为键映射到一个对象中,使用 MapKeyPair 是最好的方法,虽然我称之为 StringPair,因为它不一定与 MapKeys 绑定。跨度>
    【解决方案2】:

    听起来您正在向服务器对象发送消息以获取返回值。

    为什么不创建一个带有名称和状态(以及所有其他辅助属性)的 Server 类,设置它,然后将 servername 映射到 server?

    然后,你做这样的事情。

    Server server = map.get(serverName);
    return server.getStatus();
    

    【讨论】:

    • 我不知道为什么,但对我来说似乎更简单的是拥有一个将“服务器名称”和“服务器参数”映射到参数值的关联数组。在您的解决方案中,我必须创建 2 个类。一个代表服务器,另一个应该生成第一类的实例......也许我只是不习惯 OOP......
    • 这是 oop 解决方案。你永远不知道服务器什么时候突然有更多的字段需要返回。此外,如果您使用语义解决方案,稍后查看代码的人不会讨厌您。
    【解决方案3】:

    在我看来,唯一重要的信息就是最后的值。

    在这种情况下,最简单的解决方案是将字符串组合成一个键字符串 地图[“主服务器状态”]

    如果您想获得“MainServer”的所有值,您可以遍历所有元素并过滤以字符串“MainServer”开头的元素。

    这是一个非常基本和简单的解决方案,但是当您不想知道“MainServer”的所有元素时,您可以使用它。否则它可能会减慢您的应用程序

    【讨论】:

    • 可能是一个很好的解决方案。我也想过。但通常我需要在所有服务器上循环以获得固定参数。好吧,我总是可以连接“serverName”+“parameterName”...
    【解决方案4】:

    如果对的总数很小,那就简单点:从第一个键到第二个 Map 的 Map;第二个 Map 从第二个键到值。

    如果对的总数很大,则性能可能很重要。如果是这样,我会建议与上述相同的解决方案,但选择具有最小预期范围的第一个键(例如,如果第一个键是数千个名称之一,第二个是十个预定义状态之一,让第二个键成为您查找的第一个键)。

    如果性能无关紧要,请考虑设计透明性:使用 Pair 类作为单个 Map 中的键。 (Pair 类非常有用,您现在应该已经有了一个写得很好的类。)

    【讨论】:

    • 我将拥有 3-5 个“服务器”,并且对于每个服务器,我将拥有少于 20 个参数。
    • 那非常小,然后 - 最多 100 对。映射到映射到值,敲出来,你就完成了。
    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 2013-01-22
    • 1970-01-01
    • 2018-03-07
    • 2016-08-04
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多