为什么我不能做hashmap.put()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我不能做hashmap.put()相关的知识,希望对你有一定的参考价值。

[每当我尝试运行时,我的错误就是这个“ hmap.put(id,b0);”我做得对吗?我试图做一个用户输入,并将其插入到哈希图中。它说:找不到适合put(Integer,Student)的方法方法Map.put(Integer,String)不适用(参数不匹配;学生无法转换为字符串)方法AbstractMap.put(Integer,String)不适用(参数不匹配;学生无法转换为字符串)方法HashMap.put(Integer,String)不适用

(参数不匹配;学生无法转换为字符串)

package javaapplication30;
import java.util.*;
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;

class Student 
  int id;
  String sn, cor;

  public Student(int id, String sn, String cor) 
    this.id = id;
    this.sn = sn;
    this.cor = cor;

  


public class JavaApplication30 
  public static void main(String[] args) 
    HashMap < Integer, String > hmap = new HashMap < Integer, String > ();
    Scanner sc = new Scanner(System.in);

    for (int i = 0; i < 2; i++) 
      System.out.print("id: ");
      Integer id = sc.nextInt();
      System.out.print("name: ");
      String sn = sc.next();
      System.out.print("course: ");
      String cor = sc.next();

      Student b0 = new Student(id, sn, cor);

      hmap.put(id, b0);

    

    for (Map.Entry m: hmap.entrySet()) 
      System.out.println(m.getKey() + " " + m.getValue());
    
  

答案

您将Hasmap声明为:new HashMap < Integer, String > ();

然后您的HashMap期望将Integer作为键,将String作为值。您的对象b0不是字符串,而是一个Student对象。

然后您应该将HashMap更改为new HashMap < Integer, Student> ();(或者您可以在b0上调用toString()函数,这取决于您想做什么)

另一答案

您已声明地图为HashMap<Integer, String>。换句话说,键类型是Integer,值类型是String

但是您这样做:

  Student b0 = new Student(id, sn, cor);
  hmap.put(id, b0);

正在尝试添加一个值为Student的映射条目。

[Student不是String的子类,因此不合法。

这是错误消息的内容:

no suitable method found for put(Integer,Student) 

对应于此呼叫put(id, b0)。观察到id被声明为Integerb0Student

method Map.put(Integer,String) is not applicable 

编译器已找到签名为putput(Integer,String)方法>

(argument mismatch; Student cannot be converted to String)

编译器已尝试找到使用该put方法的合法方法。第一个参数是兼容的,但是没有转换会将Student(这是参数)转换为String(这是方法要求)。

以上是关于为什么我不能做hashmap.put()的主要内容,如果未能解决你的问题,请参考以下文章

什么是HashMap?

Java HashMap put方法不起作用[重复]

浅谈HashMap 的底层原理

Collections Framework 的 HashMap.put(Entry k) 实现中的 for 循环的目的是啥? [复制]

为啥我不能从 FragmentPagerAdapter 分离片段?

JDK源码学习笔记~HashMap.put()