软件构造博客4

本文探讨了抽象函数如何将具体数据映射到抽象值,并指出当AF(a)=AF(b)时,a和b在抽象意义上相等。同时,介绍了等价关系的自反性、对称性和传递性,阐述了两者之间的联系。通过等价关系可以构造抽象函数,反之亦然。此外,从用户视角出发,两个对象相等意味着所有观察结果一致。文章还提及了哈希表的使用,强调了equals()和hashCode()方法在对象比较中的重要性,以及它们在性能优化中的作用。
摘要由CSDN通过智能技术生成

抽象函数:回忆一下抽象函数(AF: R → A ),它将具体的表示数据映射到了抽象的值。如果AF(a)=AF(b),我们就说a和b相等。

等价关系:等价是指对于关系E ⊆ T x T ,它满足:

  • 自反性: E(t,t) ∀ t ∈ T
  • 对称性: E(t,u) ⇒ E(u,t)
  • 传递性: E(t,u) ∧ E(u,v) ⇒ E(t,v)

我们说a等于b当且仅当E(a,b)。

以上两种角度/定义实际上是一样的,通过等价关系我们可以构建一个抽象函数(译者注:就是一个封闭的二元关系运算);而抽象函数也能推出一个等价关系。

第三种判定抽象值相等的方法是从使用者/外部的角度去观察。

观察:我们说两个对象相等,当且仅当使用者无法观察到它们之间有不同,即每一个观察总会都会得到相同的结果。例如对于两个集合对象 {1,2} 和 {2,1}

  • ==比较的是索引。更准确的说,它测试的是指向相等。如果两个索引指向同一块存储区域,那它们就是==的。对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象。
  • equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等。e在每一个ADT中,quals操作必须合理定义。

一个哈希表表示的是一种映射:从键值映射到值的抽象数据类型。哈希表提供了常数级别的查找,所以它通常比数或者列表的性能要好。键不一定是有序的,也不一定有什么特别的属性,除了类型必须提供 equals 和 hashCode两个方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值