将类的成员变量添加到Map

时间:2016-07-08 20:29:03

标签: java hash add

我遇到了一些麻烦。我想将成员变量添加到地图中。

这是我的代码:

Sprinter.java

public class Sprinter {
    private int age;
    private String name;
    private String address;

public Sprinter() {
}

public Sprinter(int age, String name, String address) {
    this.age = age;
    this.name = name;
    this.address = address;
}

public void setAge(int age) {
    return this.age = age;
}

public int getAge() {
    return this.age;
}

public void setName(String name) {
    return this.age = age;
}

public String getName() {
    return this.name;
}

 public void setAddress(String address) {
    return this.address = address;
}

public String getAddress() {
    return this.address;
}

Worker.java

Sprinter _s = new Sprinter(); 
_s.setAge(16);

_s.setName("Chris");

_s.setAddress("123 Street");

Map.java

public class Maper {
    private Sprinter _sp = new Sprinter();
    private static Map<String, Sprinter> map = new HashMap<String, Sprinter>();
public void printMap() {
    map.put(_sp.getName(), _sp);
    System.out.println(map);

我希望地图中的String成为键,并且值是Sprinter类中的年龄,地址和名称字段。在我的Worker.java类中,我使用:

Maper _m = new Maper();
_m.printMap();

我的输出是:{“Chris”,“Chris”}; 但是,我希望添加所有变量。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

地图将单个键与单个值相关联 - 它明确地不能将单个键(“Chris”)与三个不同的值(16,“Chris”,“123 Street”)相关联。你有两个明显的选择:

  1. 使用三个不同的键(例如"Chris_age" - &gt; 16"Chris_name" - &gt; "Chris""Chris_address" - &gt; {{ 1}})。此选项更复杂,因为值的类型不同(int vs String),因此您需要将地图声明为"123 Street",这通常不是很好。插入代码看起来像:

    Map<String, Object>
  2. 更好的选择是使用容器对象来保存三个值,并将其存储在地图中。这就是你已经拥有的代码。在这种情况下,如果您想要年龄,您需要执行以下操作:

    map.put(_sp.getName() + "_name", _sp.getName());
    map.put(_sp.getName() + "_age", _sp.getAge());
    map.put(_sp.getName() + "_address", _sp.getAddress());