当前位置: 首页 > 面试题库 >

等值法的传递性

利稳
2023-03-14
问题内容

equals(object)方法的合同规定了以下4个属性:自反,对称,传递和一致。虽然我了解不遵循自反,对称和一致的危险,并且可以肯定同意遵循和物的优点,但我想知道如果违反和物性会给它带来什么危害?

具体来说,哪个Java库(或各种第三方库)需要依赖equals才能传递以正常工作?以我的理解,如果其他3个属性实现得当,Collections框架将起作用。


问题答案:

假设三个对象a,b,c与

a == a, b == b, c == c (reflexive)
a == b, b == a
b == c, c == b
a != c, c != a

(伪代码,x == y代表x.equals(y))。

现在,让我们将对象添加到集合中:

Set s = new HashSet(); // Set implementation doesn't matter
s.add(b); // s = [b]
s.add(a); // s doesn't change, because a == b
s.add(c); // s doesn't change, because c == b

相反,如果我们以不同的顺序添加它们:

Set s = new HashSet();
s.add(a); // s = [a]
s.add(b); // s doesn't change, because b == a
s.add(c); // s = [a,c], because c != a

这显然是违反直觉的,并且与人们期望的行为不匹配。例如,这意味着两个集合的并集(即s
after的状态s.addAll(someOtherSet))可能取决于someOtherSet的实现(元素的顺序)。



 类似资料:
  • 主要内容:1、值传递,2、引用传递,3、输出传递通过前面的学习我们知道,在调用带有参数的函数时,需要将参数传递给函数。在介绍这几种传递方式之前,我们先来介绍一下形式参数(形参)和实际参数(实参)这两个概念: 形式参数:在定义函数阶段参数列表中定义的参数称之为形式参数,简称形参,可以将它看作变量的名称,它没有具体的值,只是用来接收函数调用时传递过来的数据; 实际参数:在函数被调用时传递给函数的参数称之为实际参数,简称实参,可以将它看作变量的值,用

  • Go 语言中 值类型 有:int 系列、float 系列、bool、string、数组、结构体 值类型通常在栈中分配存储空间 值类型作为函数参数传递,是拷贝传递 在函数体内修改值类型参数,不会影响到函数外的值 package main import "fmt" func main() { num := 10 change(num) fmt.Println(num) // 10 }

  • 本文向大家介绍String类型传递是值传递,char[]类型传递是引用传递的实现,包括了String类型传递是值传递,char[]类型传递是引用传递的实现的使用技巧和注意事项,需要的朋友参考一下 如下所示: 结果是:str任然是hello,ch的第一个元素a变为c 以上就是小编为大家带来的String类型传递是值传递,char[]类型传递是引用传递的实现的全部内容了,希望对大家有所帮助,多多支持呐

  • 本文向大家介绍PHP页面间传递值和保持值的方法,包括了PHP页面间传递值和保持值的方法的使用技巧和注意事项,需要的朋友参考一下 一、目录结构 二、两次页面间传递值   在两次页面之间传递少量数据,可以使用get提交,也可以使用post提交,二者的区别恕不赘述。   1、get提交   使用get提交来传递数据,在链接地址中修改发送到服务器的 URL 如下所示http://www.cnblogs.c

  • 本文向大家介绍vue给组件传递不同的值方法,包括了vue给组件传递不同的值方法的使用技巧和注意事项,需要的朋友参考一下 这里讲解一下Vue 官网的一个实例,Vue将数据遍历传递给多个组件,这个是我们实际开发中常做的事情。一般大型应用都是使用组件搭建起来的,我们需要给组件传递不同的值,来实现不同的展现,实现代码的复用。 代码分析: 这里我直接使用了一个Vue的CDN,然后实例化Vue对象就可以使用。

  • 我有一个用于jenkins pipline的小项目,代码是用groovy编写的,我创建了一个枚举,如下所示: