HashMap键值存储和检索

时间:2018-10-23 10:29:07

标签: java hashmap

为了检查并演示getNextValue方法(如果hashmap存储不存在的值)并从map检索(如果存在),我在该方法下方添加了一个主类。预期的行为是,当第二次发送111键但每次将值放入哈希图中时,都需要从哈希图中获取值。不确定会产生什么影响-在每个循环中初始化Test还是每次都初始化hashMap,由于第二次发送111时111不可用?

下面是参考代码。

    public List<String> getNextValue(Map<String,Object> requestparam){
        Map<String,List<String>> hashMap=new HashMap<>();
        String hashKey=requestparam.get("key");
        if(hashMap.containsKey(hashKey){
             return hashMap.get(hashKey

         } 
         else{
              List<String> value=new ArrayList<>();
              value.add("aa");
              hashMap.put(hashKey,value);
              return value;
          }

}

public static void main(String[] args){
     Test t=new Test();
     Map<String,Object> request=new HashMap<>();
     List<String> x=new ArrayList<>();
     x.add("111");
     x.add("111");
     x.add("222");
     for(String y:x){
        request.put("key",y)
        System.out.println(t.getNextValue(request));
}

1 个答案:

答案 0 :(得分:2)

每次调用getNextValue时,您将创建一个新的 HashMap。

public List<String> getNextValue(Map<String,Object> requestparam){
        Map<String,List<String>> hashMap=new HashMap<>();

这就是if(hashMap.containsKey(hashKey){从未匹配的原因。

将您的hashMap局部变量转换为Test类的字段:

public class Test {

 private final Map<String,List<String>> hashMap=new HashMap<>();

 public List<String> getNextValue(Map<String,Object> requestparam){ 
  // your code with line below removed:
  // Map<String,List<String>> hashMap=new HashMap<>(); 
  ...
 }
}