雨课堂知识点总结(十二)

3.5 Equality
1.
ADT的equals( )需要满足的三个性质是[填空1]性、[填空2]性、 [填空3]性
答案: 自反性;对称性;传递性;
2.
以下针对ADT等价性的说法,不正确的是
A
如果对象a和b的R值被AF映射到相同的A值,则a和b等价
B
对对象a和b调用任何相同的方法,都会得到相同的返回值,则它们是等价的
C
对象a和b不等价,那么该ADT中不应存在任何方法op使得a. op()=b. op()
D
对象a和b是等价的,那么a和b的rep中每个field的值也- -定是相等的
正确答案:CD
A选项是从AF的角度判断等价性。
B选项是从外部观察者的角度来判断等价性。
C选项:是可以存在的这样的操作的。即使这个操作返回相同的结果,该ADT还应有其他操作会让a和b执行后的结果不同。
D选项:判断等价性取决于A值的等价性而非R值。很有可能多个R值对应于同一个A值。
3.
Java中有两种不同的操作来验证对象的等价性,分别为==和equals(),它们的”学名”是[填空1]等价性和[填空2]等价性。
答案: 引用 对象
4.
某个ADT的REP是:private int no;
private String name;他的AF是:
AF(no) == ID of a student  
那么以下equals( )正确的是:
A: return this.no == that.no
B:return this.no == that.no&&this.name == that.name
C:return this.no == that.no&&this.name.equals(that.name)
D:return this.name.equals(that.name)

答案:A
5.
针对mutable的Java类,有两种等价性,分别为[填空1]等价性和[填空2]等价性。
答案:观察 行为
6.
以下关于的等价性的说法,不正确的是
A:0bject类缺省的equals()是判断两个对象内存地址是否相等

B:若a和b满足a. equals(b)为真,那么a. hashCode()==b. hashCode( )也应为真

C:若a. equals(b)为假,那么a.hashCode( )==b. hashCode()可以为真

D:针对mutable的类,由于其rep在变化,直接使用==判断是否相等即可,无需override equals( )

正确答案:D
D选项:这要取决于实际需求。例如Java中List和Date等mutable的类,都override了equals()方法,实现观察等价性。
7.
关于hashCode()的说法,不正确的是_
A:具有相同hashCode( )返回值的两个对象a和b,必须做到a . equals(b)为真
B:若hashCode( )始终返回同一个值, 则违反了0bject对hashCode( )的要求
C:如果不override hashCode( )方法,object类缺省实现也可以满足要求
D:一个对象实例的hashCode( )返回值,在其生命周期内可以发生变化
正确答案: BCD
答案解析:
针对C选项:还是要看需求是什么,不能一概而论
针对D选项: mutable对象的
hashCode在其mutator方法执行后,就会发生变化,因此在hash table中的位置也可能随之发生变化。
8.
Date d = new Date(2019,4,1);
Set<Date> hs = new HashSet<>();
Set<Date> ts = new TreeSet<>();
hs . add(d);
ts. add(d);

d. setYear(2020) ;
println(hs. contains(d));println(ts . contains(d));

该代码执行后会打印出:
A: True; True
B: True; False
C: False; True
D: False; False
正确答案: C
答案解析: :
hashCode ,顾名思义,mutable对象的hashCode变化之后,只会影响受hashSet ,不会影响TreeSet

9.
Date d = new Date(2019,4,1);
Date f = new Date(2019,4,1);
List<Date> al=new ArrayList<>();
List<Date> ll=new LinkedList<>();
al. add(d);
ll . add(f);
println(d.equals(f));
println(al.equals(ll));
该代码执行后输出的是:
A:True; True
B:True; False
C:False; True
D:False; False
正确答案: A
答案解析:
Date是mutable的,它实现的是观察等价性,所以d和f两个值等价。

List也是mutable的,实现的也是观察等价性,所以判断其中每个元素的等价性,而d与f是等价的,故al和I也是等价的。这个跟其具体的类型( ArrayList和LinkedList )无关。

猜你喜欢

转载自www.cnblogs.com/HIT-ryp/p/10648547.html