【问题标题】:Trouble using HashMap containing Objects使用包含对象的 HashMap 时遇到问题
【发布时间】:2019-03-26 11:04:43
【问题描述】:

请原谅我的英语不好

我正在尝试创建一个 HashMap,其中一个 String 作为键,一个 Object 作为参数,我想在程序每次运行时对其进行初始化,以便将其添加到 HashMap 中的新键中。

问题是,并非所有值都返回,即第二个值返回一个奇怪的输出。

package javaex1;
import java.util.*;

public class Javaex1 {

public static void main(String[] args) {

    Person obj = new Person("Eminem", "Male");
    HashMap<String, Person> MapPerson = new HashMap<String, Person>();
    MapPerson.put("Eminem", obj);

    System.out.println(MapPerson);
  }    
}

对象

package javaex1;


public class Person {


String Name;
String Gender;


public Person (String name, String Gend) {

    this.Name = name;
    this.Gender = Gend;
}    


public String getName() {
    return Name;
}

public String getGender() {
    return Gender;
}


}

非常感谢任何帮助或提示!提前感谢您的宝贵时间!

预期结果应该是“Eminem Male”。相反,我得到的是:

{Eminem=javaex1.Person@2a139a55}

【问题讨论】:

  • 您正在获取对象的哈希码值。覆盖您的 toString 方法或尝试 System.out.println(MapPerson.collect());

标签: java dictionary oop hashmap jvm


【解决方案1】:

发生这种情况是因为您尝试打印一个对象,打印时一个对象给出了 Object 类的默认 toString 实现,如下所示

// Object 类中 toString 的实现

 public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这是您在当前输出中可以看到的内容。

你应该像这样覆盖 Person 类中的 toString 方法。

    public String toString() {
    return this.Name + " " + this.Gender; 
}

这样它就会返回姓名和性别

【讨论】:

    【解决方案2】:

    您应该覆盖Person 类中的toString 方法。像这样:

    @Override
    public String toString() {
        return this.Name + " " + this.Gender;
    }
    

    【讨论】:

      【解决方案3】:

      您打印的是 MapPerson 对象,而不是 Person 对象。

      你的代码应该是:

      Person person = MapPerson.get("Eminem");
      System.out.println(person.getName() + " " + person.getGender());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多