Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套hashmap作为获取值的键_Java_Hashmap - Fatal编程技术网

Java 嵌套hashmap作为获取值的键

Java 嵌套hashmap作为获取值的键,java,hashmap,Java,Hashmap,我有一个问题,在谷歌搜索后我没有找到它的解决方案。问题是我有一个hashmap,它包含另一个hashmap作为键,并针对它有一个值。我想为该hashmap获取一个值。例如,下面是一段代码 HashMap< Hashmap< Integer, String>, Integer> outerHashMap = new HashMap< Hashmap< Integer, String>, Integer>(); Hashmap< Integer

我有一个问题,在谷歌搜索后我没有找到它的解决方案。问题是我有一个
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);
HashMap,Integer>outerHashMap=newhashmap,Integer>();
HashmapinnerMap1=新的Hashmap();
innerMap1.put(100,“A”);
innerMap1.put(101,“B”);
innerMap1.put(102,“C”);
HashmapinnerMap2=新的Hashmap();
innerMap2.put(200,“D”);
innerMap2.put(201,“E”);
innerMap2.put(202,“F”);
outerHashMap.put(InnerMap1143);
outerHashMap.put(innerMap2432);

现在我的问题是,是否可以通过为innerMap提供一个键/值对作为outerHashMap键的一部分来获取outerHashMap的值。例如,如果我只将单个键/值对(101,“B”)作为键的一部分提供给outerHashMap,我是否能够获得值143?

尝试如下制作
getOuterValue()
,如果放入
outerHashMap
innerKey=101
innerValue=“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";
}
publicstaticvoidmain(字符串[]args){
HashMap outerHashMap=新的HashMap,整数>();
HashMap innerMap1=新的HashMap();
innerMap1.put(100,“A”);
innerMap1.put(101,“B”);
innerMap1.put(102,“C”);
HashMapinnerMap2=新的HashMap();
innerMap2.put(200,“D”);
innerMap2.put(201,“E”);
innerMap2.put(202,“F”);
outerHashMap.put(InnerMap1143);
outerHashMap.put(innerMap2432);
整数innerKey=101;
字符串innerValue=“B”;
字符串outerValue=getOuterValue(outerHashMap、innerKey、innerValue);
}
私有静态字符串getOuterValue(HashMap hashMapOuter、整数innerKey、字符串innerValue){
对于(Map.Entry entryO:hashMapOuter.entrySet()){
HashMap keyO=(HashMap)entryO.getKey();
对于(Map.Entry entryI:keyO.entrySet()){
整数keyI=(整数)entryI.getKey();
字符串值i=(字符串)entryI.getValue();
if(键i.equals(innerKey)和&valueI.equals(innerValue)){
返回字符串.valueOf(entryO.getValue());
}
}
}
返回“无此类元素”;
}

您将如何向
outerHashMap
提供一对钥匙?它不会神奇地获得响应任意方法调用的能力。您可以包装外部
Hashmap
并创建一个函数,该函数接受密钥对,从密钥对中创建
Hashmap
,并使用它对合成的
outerHashMap
进行索引,从映射中获取的方法需要一个等于它的一个数据的密钥,这是我的问题@DaveNewton,是否有可能获取一个值,而不是提供一个完整的内部映射作为密钥,我们只提供一部分键/值对到outerHashMap?不,不会。
HashMap
由键的散列(即整个键)索引。它不关心键的类型,甚至不关心键重写
hashCode
——它只调用
key.hashCode()
,并将元组放入正确的bucket中。您似乎假设
HashMap
能够根据键的类型对键进行内省并对事物进行不同的索引,但事实并非如此。为了从
HashMap
中检索值,需要提供一个与插入的键相同的
hashCode
,即
等于
。就这么简单。如果插入包含相同条目的两个键,会发生什么情况?此时,它不再是
映射
,它只是一个线性搜索,就像任何其他集合一样。好吧,可能我不理解@AdnanJaved问题。谢谢@Grygori,如果数据/条目对于innerMap来说足够大,那么您提出的解决方案中有一个在我的情况下不是最好/合适的。BorisTheSpider说的对,它不再是地图了,因为我们必须先遍历,然后才能获取值(如果存在)。而映射的目的只是提供键并获取值。Boristeider我已经听你说过,直接作为键/值的一部分是不可能的。谢谢大家。