为什么两个不同的哈希映射的相同值的输出为false?

时间:2016-10-02 09:07:41

标签: java dictionary hashmap comparison

代码:

transform.position += transform.forward * Time.deltaTime * movementSpeed;

4 个答案:

答案 0 :(得分:1)

您正在比较两个Collection<HashSet<Integer>>>对象的引用,但您想要比较两个<HashSet<Integer>>个对象。尝试从<HashSet<Integer>>个对象中提取Collection<HashSet<Integer>>>个对象,并将其与equals()方法进行比较。顺便说一下 - 将参考文献与==进行比较的结果也应该是true

答案 1 :(得分:1)

正确比较对象数据类型的相等性是使用方法equals()

map1.equals(map2);

答案 2 :(得分:1)

==告诉您两个值是否相同。 但是map1.values()的值包含集合的集合,而是对包含对集合的引用的集合的引用。

因为它们是引用,map1.values() == map2.values()会告诉您map1.values()map2.values()是否引用相同的对象,而不是它们,因此它的计算结果为false。

您可以通过调用equals方法比较两个对象,例如map1.values().equals(map2.values())

答案 3 :(得分:0)

map1和map2都创建了自己的values列表。两个列表在您的情况下都有一个单独的元素,这是相同的==。如果您使用equals,那么两个列表都是相同的。 ==测试对象的相同性/身份。

顺便说一下,java中的约定是:

    Map<Integer, Set<Integer>> map1 = new HashMap<>();
    Map<Integer, Set<Integer>> map2 = new HashMap<>();
    Set<Integer> set1 = new HashSet<>();

对于使用变量的接口(Map,Set),有理由:因为这样可能会改变实现,例如更改为按键排序的TreeMap。特别好:您的代码将以最广泛的类型来运行。