嵌套哈希图作为获取值的键

时间:2018-08-17 20:19:07

标签: java hashmap

我有一个问题,在Google搜索后找不到。问题是我有hashmap,其中包含另一个hashmap作为键,并且与它相反是单个值。我想获取该hashmap的值。例如,下面是一段代码。

HashMap< Hashmap< Integer, String>, Integer> outerHashMap = new HashMap< Hashmap< Integer, String>, Integer>();

Hashmap< Integer, String> innerMap1 = new Hashmap< Integer, String>();

innerMap1.put(100,"A");                                                            

innerMap1.put(101,"B");

innerMap1.put(102,"C");

Hashmap< Integer, String> innerMap2 = new Hashmap< Integer, String>();

innerMap2.put(200,"D");

innerMap2.put(201,"E");

innerMap2.put(202,"F");

outerHashMap.put(innerMap1, 143);

outerHashMap.put(innerMap2, 432);

现在我的问题是,有可能通过为innerMap提供一个 key / value 对作为externalHashMap的一部分来获取 outerHashMap 的值。就像如果我仅将一个键/值对(101,“ B”)作为key的一部分提供给outsideHashMap一样,我是否可以获得值143?

1 个答案:

答案 0 :(得分:-1)

尝试如下制作getOuterValue(),如果将outerHashMapinnerKey = 101innerValue = "B"放入其中,则会返回outerValue = 143

public static void main(String[] args) {
    HashMap<HashMap<Integer, String>, Integer> outerHashMap = new HashMap<HashMap< Integer, String>, Integer>();
    HashMap<Integer, String> innerMap1 = new HashMap< Integer, String>();
    innerMap1.put(100,"A");
    innerMap1.put(101,"B");
    innerMap1.put(102,"C");
    HashMap< Integer, String> innerMap2 = new HashMap< Integer, String>();
    innerMap2.put(200,"D");
    innerMap2.put(201,"E");
    innerMap2.put(202,"F");
    outerHashMap.put(innerMap1, 143);
    outerHashMap.put(innerMap2, 432);
    Integer innerKey = 101;
    String innerValue = "B";
    String outerValue = getOuterValue(outerHashMap, innerKey, innerValue);
}

private static String getOuterValue(HashMap<?,?> hashMapOuter, Integer innerKey, String innerValue) {
    for (Map.Entry entryO : hashMapOuter.entrySet()) {
        HashMap<?,?> keyO = (HashMap) entryO.getKey();
        for (Map.Entry entryI : keyO.entrySet()) {
            Integer keyI = (Integer) entryI.getKey();
            String valueI = (String) entryI.getValue();
            if (keyI.equals(innerKey) && valueI.equals(innerValue)) {
                return String.valueOf(entryO.getValue());
            }
        }
    }
    return "No such element";
}