使用包含对象的HashMap出现问题

时间:2019-03-26 11:04:44

标签: java object hashmap

请原谅我的英语不好

我正在尝试创建一个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}

3 个答案:

答案 0 :(得分:2)

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

// Object类中toString的实现

META6.json

这是您在当前输出中看到的。

您应该像这样在Person类中使用tover方法。

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

以便它返回姓名和性别

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

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

您的代码应为:

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