如何按值比较两个地图?我有两个包含相等值的地图,想通过它们的值来比较它们。这是一个例子:
Map a = new HashMap();
a.put("foo", "bar"+"bar");
a.put("zoo", "bar"+"bar");
Map b = new HashMap();
b.put(new String("foo"), "bar"+"bar");
b.put(new String("zoo"), "bar"+"bar");
System.out.println("equals: " + a.equals(b)); // obviously false
我应该如何更改代码以获得真实的?
原文由 paweloque 发布,翻译遵循 CC BY-SA 4.0 许可协议
您尝试使用连接构造不同的字符串将会失败,因为它是在编译时执行的。这两张地图都有一对;每对将以“foo”和“barbar”作为键/值,两者都使用相同的字符串引用。
假设您真的想在不引用任何键的情况下比较值集,这只是一种情况:
比较
map1.values()
与map2.values()
可能 会起作用 - 但它们返回的顺序也可能用于相等比较,这不是你想要的.请注意,使用集合有其自身的问题 - 因为上面的代码会将 {“a”:“0”, “b”:“0”} 和 {“c”:“0”} 的映射视为相等。 ..毕竟,价值集是平等的。
如果您可以更严格地定义您想要的内容,就可以更轻松地确保我们为您提供正确的答案。