ADT和OOP的等价性

1.等价性关系
  等价关系

自反、对称、传递

2.评价等价性的三种方法
  ADT的等价操作

抽象函数AF:内部表示->抽象表示

基于抽象函数AF定义ADT的等价操作。

使用AF定义等价性

如果AF映射到相同的结果,则等价。

使用操作定义等价性

站在外部观察者角度,对两个对象调用任何相同的操作,都会得到相同的结果则说明等价。

3.==和equals
== :引用等价性,equals():对象等价性

自定义ADT时,需要根据对等价的要求,决定是否重写equals()

==操作和equals()方法

对对象数据类型,采用equals(),对基本数据类型,采用==(判断ID是否相等,指向同一段空间)

应该总是使用equals()判断相等,

4.实现equals()
  不变类型的等价性

默认实现是使用了引用等价性

需要重写

instanceof

判断某个对象是不是特定类型(或其子类型)

动态类型检查。除了用于实现equals方法,尽可能避免使用instanceof和getclass

用多态性代替instanceof

5.对象契约
  对象里的equals()契约

除非对象被修改了,否则调用多次equals的结果应一致。相等的对象,其hashCode的结果必须一致。

打破了等价关系

自反性,传递性(绝对值的例子),对称性

哈希表

哈希表实现了键值之间的映射。键值对中的key被映射为hashcode,对应到数组的index,hashcode决定了数据被存储到数组的哪个位置。

哈希表契约

程序中多次调用同一对象的hashCode方法,都要返回相同值。等价的对象必须有相同的hashCode。不相等的对象hashCode相同性能会变差。

重写hashCode()

最简单方法:让所有对象的hashcode为一常量:降低了效率。

通过equals计算用到的所有信息的hashcode组合出新的hashcode

6.可变类型的等价性 
  观察等价性(倾向):不改变状态的情况下,两个可变对象看起来一致。

行为等价性:调用对象的任何方法都展示出一致的结果。

可变类型和不可变类型equals和hashcode的方法总结

后者必须重写,前者不应该

7.自动装箱和等价性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值