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我已经听你说过,直接作为键/值的一部分是不可能的。谢谢大家。