gpt4 book ai didi

java - 如何制作具有两个索引的 map ?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:16 24 4
gpt4 key购买 nike

我在 java 中有一个这样的 map :

Map<String index1, Map<String index 2, Object obj>> map = new HashMap<>();

我想通过使用 index1index2 作为查找在 map 中获取我的 Object

最佳答案

最简单的方法是使用 Guava 的 Table ,如果您愿意使用第三方库。

它是这样工作的:

Table<String, String, Object> table = HashBasedTable.create();
table.put(index1, index2, obj);
Object retrievedObject = table.get(index1, index2);

您可以按照以下说明将其添加到您的项目中:How to add Guava to Eclipse project


不想用Guava,问题就大了。如果您尝试插入具有新的第一个键的元素,则必须确保内部映射已经存在。这意味着,每次你做 put ,您必须检索 innerMap ,看是否存在,不存在则创建。 您每次调用 Map.put 时都必须这样做. 此外,您可能会抛出 NullPointerException。如果调用 get 时内部 map 不存在在内部 map 上。

如果你这样做,应该包装你的 Map<String, Map<String, Object>在外部类中管理这些问题,或使用 Java 8 的 computeIfAbsent .但最简单的方法是只使用 Table如上。

如果您使用自己的类代替 Table ,它会是这样的:

public class DoubleMap<R, C, V> {
private final Map<R, Map<C, V>> backingMap;

public DoubleMap() {
this.backingMap = new HashMap<>();
}

public V get(R row, C column) {
Map<C, V> innerMap = backingMap.get(row);
if(map == null) return null;
else return innerMap.get(column);
}

public void put(R row, C column, V value) {
Map<C, V> innerMap = backingMap.get(row);
if(innerMap == null) {
innerMap = new HashMap<C, V>();
backingMap.put(row, innerMap);
}
innerMap.put(column, value);
}
}

您可以通过以下方式使用此类:

DoubleMap<String, String, Object> map = new DoubleMap();

请注意,此答案的功能比 Guava 版本少很多。

关于java - 如何制作具有两个索引的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32151775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com