• HIT软件构造课程3.5总结(Equality in ADT and 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.自动装箱和等价性

      

  • 相关阅读:
    PipeCAD设备管口方位图
    Status code: 404 for http://mirrors.cloud.aliyuncs.com/centos/8/AppStream/x86_64/os/repodata/repom
    LNMP下Redis介绍以及安装(Linux)
    CentOS Linux 8 AppStream 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs
    EndNote 使用经验(GT/T 77142015格式引文)
    EndNote 使用经验(标题出现 %J .....)
    EndNote 使用经验(移除重复文献)
    EndNote 使用经验(初次使用)
    20192409潘则宇 实验七 网络欺诈与防范
    20192409潘则宇 实验六 Metasploit攻击渗透实践
  • 原文地址:https://www.cnblogs.com/upuphe/p/12663325.html
Copyright © 2020-2023  润新知