我遇到了一些麻烦。我想将成员变量添加到地图中。
这是我的代码:
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”}; 但是,我希望添加所有变量。有什么建议吗?
答案 0 :(得分:1)
地图将单个键与单个值相关联 - 它明确地不能将单个键(“Chris”)与三个不同的值(16,“Chris”,“123 Street”)相关联。你有两个明显的选择:
使用三个不同的键(例如"Chris_age"
- &gt; 16
,"Chris_name"
- &gt; "Chris"
,"Chris_address"
- &gt; {{ 1}})。此选项更复杂,因为值的类型不同(int vs String),因此您需要将地图声明为"123 Street"
,这通常不是很好。插入代码看起来像:
Map<String, Object>
更好的选择是使用容器对象来保存三个值,并将其存储在地图中。这就是你已经拥有的代码。在这种情况下,如果您想要年龄,您需要执行以下操作:
map.put(_sp.getName() + "_name", _sp.getName());
map.put(_sp.getName() + "_age", _sp.getAge());
map.put(_sp.getName() + "_address", _sp.getAddress());