从哈希映射

时间:2016-06-07 14:01:06

标签: java object hashmap

我需要将对(字符串,对象)保存到hashmap中。基本上我设法填充hashmap但我不知道如何访问存储在内存中的值。 这是我的代码:

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

当我尝试访问hashmap并打印它的值时,我只得到最后一个,我使用以下内容:

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文件中读取。

Dir.N:123450标签:label5

3 个答案:

答案 0 :(得分:1)

给定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]

答案 1 :(得分:0)

以下代码将遍历地图,并将键和值存储在两个列表中。

List<String> keys = new ArrayList();
List<Object> values = new ArrayList();

for (Map.Entry<String, Object> speedDial: SDs.entrySet()) {
            Object speedDialValue = speedDial.getValue();
            String key= speedDial.getKey();
            keys.add(key);
            values.add(speedDialValue);
}

要检索字符串值,通常会使用getter,因为建议您使用private修饰符作为类属性。

public class speedDial{ 

  private String label, dirN;


  public speedDial (String l, String dN) { 
     this.label = l; 
     this.dirN = dN; 
   } 

  public String getLabel(){
     return this.label;
   }

   public String getDirN(){
     return this.dirN;
   }
}

您可以使用yourObject.getLabel();yourObject.getDirN();

希望有所帮助!

答案 2 :(得分:0)

SDs.keySet()为您提供HashMap的键集 您可以使用

获取值列表
for (String mapKey : SDs.keySet()) {
    System.out.println("key: "+mapKey+"  value: "+ SDs.get(mapKey).toString());
}

Yous必须为你的speedDial写一个toString()函数