Java 如何比较两个映射的入口集
我有两个hashmap,我只想比较它们的键以及它们的值Java 如何比较两个映射的入口集,java,collections,Java,Collections,我有两个hashmap,我只想比较它们的键以及它们的值 Student stu1=new Student(1, "student_1_Name"); Student stu2=new Student(2, "student_2_Name"); Map<Integer, Student> map1= new Hashmap<Integer, Student>(); Map<Integer, Student> map2= new Hashmap<Integ
Student stu1=new Student(1, "student_1_Name");
Student stu2=new Student(2, "student_2_Name");
Map<Integer, Student> map1= new Hashmap<Integer, Student>();
Map<Integer, Student> map2= new Hashmap<Integer, Student>();
map1.put(1, stu1);
map2.put(2, stu2);
System.out.println("is there any diff.==="+map1.entrySet().equals(map2.entrySet()));
Student stu1=新学生(1,“学生名”);
学生stu2=新学生(2,“学生姓名”);
Map map1=新的Hashmap();
Map map2=新的Hashmap();
map1.put(1,stu1);
map2.put(2,stu2);
System.out.println(“是否存在任何差异==”+map1.entrySet().equals(map2.entrySet()));
据我所知:
- map.keySet():提供映射的键
- map.values():提供映射的值
- map.entrySet():提供键和值
上面的代码片段总是给出false。我只想比较两个贴图的值和键。请告诉我如何比较两个映射?Equals和entryset的hashcode将比较映射实现本身的实例,而不是元素 通常的机制是对比较键或值的条目集进行迭代,如下所示:
for (Map.Entry<String, String> entry : map.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
myBoolean = entry.getKey().equals(myOtherString);
}
for(Map.Entry:Map.entrySet())
{
System.out.println(entry.getKey()+“/”+entry.getValue());
myBoolean=entry.getKey().equals(myOtherString);
}
必须迭代集合。例如:
private boolean isEqual(map1, map2){
for (Integer i : map1.keySet())
if(map2.contains(i))
if(! map1.get(k).equlas(map2.get(k)))
return false;
else return false;
return true;
}
该计划:
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<Integer, String> map1 = new HashMap<Integer, String>();
Map<Integer, String> map2 = new HashMap<Integer, String>();
map1.put(2, "bbb");
map1.put(1, "aaa");
map2.put(1, "aaa");
map2.put(2, "bbb");
System.out.println(map1.entrySet().equals(map2.entrySet()));
System.out.println(map1.equals(map2));
}
}
该问题与该计划有两个显著差异:
String
,而不是Student
String
有一个equals()
和一个hashCode()
,它们彼此一致,反映的是值,而不是实例相等java.util.HashMap
。问题程序使用了HashmapHashMap
有一个equals()
和一个hashCode()
,它们彼此一致并遵循java.util.Map
契约我建议检查
Student
和Hashmap
中的equals()
和hashCode()
的实现,不要忘记为Student类实现hashCode+equalsYaa,所以如果需要比较两个映射的键和值,我应该怎么做。??另外,我不想把手动逻辑放在这里……不正确。任何正确的java.util.Map
实现都有一个equals(Object o)
,它“将指定对象与此映射进行相等比较。如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true。更正式地说,如果m1.entrySet().equals(m2.entrySet()),则两个映射m1和m2表示相同的映射。这可确保equals方法在映射接口的不同实现中正常工作。“您希望准确比较什么?分别输入键和值或输入项(一个输入项的键和值都应等于另一个输入项的键和值)。由于键不同,您会得到false!一个使用1
,另一个使用2
而不仅仅是按键。这些值也不同。因此,如果它打印的不是false
,那么肯定有严重错误。谢谢你的提示。但是我说我不想把人工逻辑放在这里。。。因为我的地图是超图,有很多其他的内部地图或POJO对象。所以我只需要使用一些通用的方法,否则我必须先得到map的值,然后比较内部pojo的属性。我不能在学生类上重写equals方法。@user3029929它的equals方法做什么?它不像是在做其他工作。。但在这一点上,我不能使用equals和hashcode方法。正如我所说,这只是一个例子。。我的原始实现更通用。它的代码不知道需要比较哪个类或对象。一切都是动态的。我认为我应该使用反射。根据定义,调用equals(我展示的代码间接调用equals)是询问对象在逻辑上是否与其他对象相等的正确、最通用的方法。
true
true