【发布时间】:2011-01-30 19:46:40
【问题描述】:
我想要一个将两个字符串映射为一个字符串的映射。例如:map["MainServer","Status"] 返回“活动”。在Java中最好的方法是什么。我应该使用包含另一个 HashMap 作为其元素的 HashMap 吗?
【问题讨论】:
标签: java map multidimensional-array 2d associative-array
我想要一个将两个字符串映射为一个字符串的映射。例如:map["MainServer","Status"] 返回“活动”。在Java中最好的方法是什么。我应该使用包含另一个 HashMap 作为其元素的 HashMap 吗?
【问题讨论】:
标签: java map multidimensional-array 2d associative-array
映射到映射意味着您正在进行双重查找(语义和成本方面)。 这是你真正想要的吗?
您最好定义一个包含 X 字符串的 MapKeyPair 类,并为它们覆盖 equals 和 hashCode。
更一般地说,如果这对具有实际含义或抽象,则通过适当命名的对象来表示它。
【讨论】:
听起来您正在向服务器对象发送消息以获取返回值。
为什么不创建一个带有名称和状态(以及所有其他辅助属性)的 Server 类,设置它,然后将 servername 映射到 server?
然后,你做这样的事情。
Server server = map.get(serverName);
return server.getStatus();
【讨论】:
在我看来,唯一重要的信息就是最后的值。
在这种情况下,最简单的解决方案是将字符串组合成一个键字符串 地图[“主服务器状态”]
如果您想获得“MainServer”的所有值,您可以遍历所有元素并过滤以字符串“MainServer”开头的元素。
这是一个非常基本和简单的解决方案,但是当您不想知道“MainServer”的所有元素时,您可以使用它。否则它可能会减慢您的应用程序
【讨论】:
如果对的总数很小,那就简单点:从第一个键到第二个 Map 的 Map;第二个 Map 从第二个键到值。
如果对的总数很大,则性能可能很重要。如果是这样,我会建议与上述相同的解决方案,但选择具有最小预期范围的第一个键(例如,如果第一个键是数千个名称之一,第二个是十个预定义状态之一,让第二个键成为您查找的第一个键)。
如果性能无关紧要,请考虑设计透明性:使用 Pair 类作为单个 Map 中的键。 (Pair 类非常有用,您现在应该已经有了一个写得很好的类。)
【讨论】: