我需要将对(字符串,对象)保存到哈希图中。基本上,我设法填充了哈希图,但是我不知道如何访问存储在内存中的值。
这是我的代码:
HashMap<String, speedDial> SDs = new HashMap<String, speedDial>();
speedDial sd = new speedDial();
SDs.put(String.valueOf(temp),sd); whre temp is my index and sd my object
然后,我将数据填充到sd中,并从xml文件中读取数据。
当我使用eclypse调试项目时,我可以看到这些值已正确存储到内存中,但是我不知道如何获取与该对象关联的字符串值,请参见SD对象格式
class speedDial{
String label, dirN;
speedDial (String l, String dN) {
this.label = l;
this.dirN = dN;
}
}
参见下图:它突出显示了我要访问的数据!
enter image description here
当我尝试访问哈希图并打印其值时,我只得到了最后一个,我使用以下方法:
for ( int k = 0; k <50; k++) {
speedDial.printSD(SDs.get(String.valueOf(k)));
}
这是我从speedDial类获取的printSD方法:
public static void printSD (speedDial SD) {
System.out.println("Dir.N: " + SD.dirN + " Label: " + SD.label);
}
这是所有50次迭代的输出,这是我在另一个从XML文件读取的for循环中添加到哈希图中的最后一个元素。
目录编号:123450标签:label5
最佳答案
给定一个HashMap如:
SpeedDial speedDial1 = new SpeedDial("test1", "test2");
SpeedDial speedDial2 = new SpeedDial("test3", "test4");
SpeedDial speedDial3 = new SpeedDial("test5", "test6");
HashMap<String, SpeedDial> exampleHashMap = new HashMap<>(3);
exampleHashMap.put("key1", speedDial1);
exampleHashMap.put("key2", speedDial2);
exampleHashMap.put("key3", speedDial3);
您可以像这样检索给定键的值:
SpeedDial exampleOfGetValue = exampleHashMap.get("key1");
System.out.println(exampleOfGetValue.label);
System.out.println(exampleOfGetValue.dirN);
输出:
test1
test2
如果要检索给定值的键,则可以使用以下方法:
public final <S, T> List<S> getKeysForValue(final HashMap<S, T> hashMap, final T value) {
return hashMap.entrySet()
.stream()
.filter(entry -> entry.getValue().equals(value))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
如果您像这样调用此函数:
List<String> exampleOfGetKeys = getKeysForValue(exampleHashMap, speedDial1);
System.out.println(exampleOfGetKeys);
它将输出具有该值的所有键的列表:
[key1]
关于java - 从哈希图读取对象内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37681554/