在HashMap中查找和替换值?

时间:2014-12-07 23:10:23

标签: java linked-list hashmap

我编写了一个HashMap,其中键为String,值为String的LinkedList。

我想编写一个使用字符串和值的键的方法。然后我想在HashMap中找到与给定键匹配的键,然后将给定的String添加到字符串列表中。

**谢谢你们,但还有另外一个错误。 在这一行“Likes.put(s,Likes.get(s).add(fav));.”它说:

Error: no suitable method found for put(java.lang.String,boolean)
    method java.util.HashMap.put(java.lang.String,java.util.LinkedList<java.lang.String>) is not applicable
      (actual argument boolean cannot be converted to java.util.LinkedList<java.lang.String> by method invocation conversion)
    method java.util.AbstractMap.put(java.lang.String,java.util.LinkedList<java.lang.String>) is not applicable
      (actual argument boolean cannot be converted to java.util.LinkedList<java.lang.String> by method invocation conversion)

我不知道为什么它说“实际参数是布尔”!我想插入一个LinkedList而不是布尔值

class  Recomnder {

  Recomnder(){
  Likes.put("tom",new LinkedList() ); 
  Recomnder.addLikes("tom","movie tovi"); 
  }

  HashMap<String,LinkedList<String>> Likes = new HashMap<String,LinkedList<String>>(); 


 void addLikes (String name, String fav){
     for (String s : Likes.keySet()) {
         if (s.equals(name))
         Likes.put(s,Likes.get(s).add(fav));
       }
     }
   }

3 个答案:

答案 0 :(得分:1)

问题出在本声明中:

Recomnder.addLikes("tom","movie tovi"); 

通过这种方式,您告诉编译器您要将addLikes作为静态方法访问。但是,它未定义为静态方法。您只能在Recomnder的实例上调用addLikes。因此,如果您将其更改为:

addLikes("tom","movie tovi"); 

它应该工作。
顺便说一句。尝试遵守Java命名约定。习惯于始终使用小写字母开始实例变量名称(例如喜欢而不是喜欢)。这样你就可以更容易地发现这样的错误。

答案 1 :(得分:1)

需要从实例调用实例方法。你的addLikes方法是一个实例方法(它没有修饰符静态)。您需要先创建该类的实例,然后才能调用该方法。

答案 2 :(得分:0)

除了将您的方法更改为静态。更改以下声明。


Likes.put(S,Likes.get(一个或多个)。新增(FAV));


Likes.get(S)。新增(FAV);

在上面的代码中,Likes.get(s).add(fav)返回布尔值,这个返回值被添加到Map中。因此编译器会给出错误。

只需将字符串添加到Likes.get(s)就可以了,因为java可以处理引用。这将按预期工作。