我必须做一个练习,我需要一些帮助。
我有两个名为teacher1和teacher2的对象,其属性名称和年龄:
Teacher teacher1 = new Teacher();
Teacher teacher2 = new Teacher();
teacher1.newTeacher("David", 26);
teacher2.newTeacher("Douglas", 26);
newTeacher是类Teacher的构造函数,包含在另一个名为Teacher.class的类中,其中包含
public class Teacher {
String name;
int age;
public void newTeacher(String n, int a) {
name = n;
age = a;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
我必须将每个人放在一个不同的Map中,并使用String作为键:
HashMap<String, Object> map1 = new HashMap<String, Object();
HashMap<String, Object> map2 = new HashMap<String, Object();
map1.put("123A",teacher1);
map2.put("456B",teacher2);
然后我必须从每个地图访问它们并比较它们的属性。
你能帮助我完成这最后一步吗?
答案 0 :(得分:0)
如果你只想迭代它们进行比较,它应该是相当直接的。检查一下: -
for(Map.Entry obj1 : map1.entrySet()){
for(Map.Entry obj2 : map2.entrySet()){
System.out.println("OBJ 1 : "+obj1.getKey()+", "+((Teacher)obj1.getValue()).getName()+", "+((Teacher)obj1.getValue()).getAge());
System.out.println("OBJ 2 : "+obj2.getKey()+", "+((Teacher)obj2.getValue()).getName()+", "+((Teacher)obj2.getValue()).getAge());
}
}
PS: - 只是为了把工作代码直接用于将其类型化为教师,但你应该使用instanceof&amp;在执行此操作之前进行null检查,因为您已声明hashmap将Object存储为值而不是专门的Teacher。
答案 1 :(得分:0)
如果我对您尝试做的事情的理解是正确的,那么可以采用Teacher
课程中实现equals(Object)
,然后获取实例(例如teacherA
}通过以密钥为参数调用teacherB
,然后执行Map.get(String)
,从地图中{和if (teacherA.equals(teacherB))...
)。
在equals(Object)
的实施中,您可以定义规则以确定2位教师是否相同(在您的情况下,可能是他们有相同的name
和age
)。< / p>
但是你的代码有错误,f.ex。您的newTeacher(String, int)
不是类Teacher
的构造函数,它只是一个将值设置为您调用该方法的实例的字段name
和age
的方法。您应该再次阅读文档,f.ex。 https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html。
此外,作为良好做法,您应该使用接口(map1
)而不是map2
或{{1}的任何其他具体实现来声明您的Map
和HashMap
接口。正如评论中指出的应该是Map
。
答案 2 :(得分:0)
首先,使用适当的构造函数并在您的哈希映射中使用严格类型。 你的片段在很多方面都是错误的。
public final class Teacher {
private final String name;
private final int age;
public Teacher(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
-
Teacher teacher1 = new Teacher("David", 26);
Teacher teacher2 = new Teacher("Douglas", 26);
HashMap<String, Teacher> map1 = new HashMap<String, Teacher>();
HashMap<String, Teacher> map2 = new HashMap<String, Teacher>();
map1.put("123A",teacher1);
map2.put("456B",teacher2);
for (Teacher t1 : map1.values()) {
for (Teacher t2 : map2.values()) {
if (t1.getName().equals(t2.getName())) {
System.out.println("name compares");
} else {
System.out.println("name not compares");
}
if (t1.getAge() == t2.getAge()) {
System.out.println("age compares");
} else {
System.out.println("age not compares");
}
}
}