美文网首页
SC03 等价

SC03 等价

作者: 小麻巧吃西瓜 | 来源:发表于2019-11-07 16:53 被阅读0次

这个合集本来都准备半途而废了。结果在刷题的过程中又遇等价,那不如来简单总结一下吧。


1.等价的三种表达形式

a.抽象函数
f: R → A
a等价于b 当且仅当 f(a)=f(b)

b.相等的数学表达
满足自反性,对称性和传递性

c.观察法
一种判定性方法,即对两个集合或两个元素调用任何操作得到的结果都是一样的。

2.== vs equals()

== 引用相等(指向相同的内存)
equals() 对象相等(对象包含的内容相同)

3. 不可变类型的equals方法重写

默认写法:

public class Object {
    ...
    public boolean equals(Object that) {
        return this == that;
    }
}

这种写法若不重写对于不可变类型来说基本是错误的,和引用相等是等价的。


一个不可变的抽象数据类型(ADT)的例子:

public class Duration {
    private final int mins;
    private final int secs;
    
    /** Make a duration lasting for m minutes and s seconds. */
    public Duration(int m, int s) {
        mins = m; secs = s;
    }
    /** @return length of this duration in seconds */
    public long getLength() {
        return mins*60 + secs;
    }
}

重写它的equals方法:

@Override
public boolean equals (Object thatObject) {
    if (!(thatObject instanceof Duration)) return false;
    Duration thatDuration = (Duration) thatObject;
    return this.getLength() == thatDuration.getLength();
}

测试结果:

Duration d1 = new Duration(1, 2);
Duration d2 = new Duration(1, 2);
Object o2 = d2;
d1.equals(d2) → true
d1.equals(o2) → true

注:instanceof除了在重写equlas方法时,其他时候都是不推荐使用的。

4. Object类重写equals方法必须满足的规则

a.满足三个数学特性:自反性,对称性,传递性。
b.对于非空引用xx.equals(null)返回false
c.应具有一致性,多次调用方法的返回结果应该一样/
d.对于调用equals方法返回为true的对象,其对应的哈希值应该是一样的。

因为哈希值与实际的存储插槽有关,如果两个对象的哈希值不同,存放的插槽也会不同。

规则:Always override hashCode when you override equals .

对于不可变类型,需要重写equals()hashCode()
对于不可变类型,则不需要。

相关文章

  • SC03 等价

    这个合集本来都准备半途而废了。结果在刷题的过程中又遇等价,那不如来简单总结一下吧。 1.等价的三种表达形式 a.抽...

  • Kotlin学习之初探——运算符和中缀表达式

    运算符 *==等价equals*+等价plus*in等价contains*[]等价get,数组集合中应用,在等号的...

  • @Bean讲解

    @Configuation等价于 @Bean等价于 @ComponentScan等价于

  • 等价

    大多数失望在于,他给你一束玫瑰你却给了他你的一颗真心。

  • 等价

    你对我无情,我何必有义, 你对我掏心,我必然谨记, 你对我算计,我何必继续, 你对我真挚,我必然珍惜。

  • 等价

    走了多久 我用白皙的阳光交换 却看见一张虚无的脸庞 我用最美的时间付出 虽然短暂 却比一夜漫长 我无力祈求 迷恋虚...

  • 等价

    蔡康永说过一句话: “人与人之间,是有一个情感账户的,每次让对方开心,存款就多一点,每次让对方难过,存款就少一些。...

  • 测试用例设计的四种常用方法

    等价类划分法 根据输入条件、输入值或输入个数等分为有效等价类和无效等价类。 在有效等价类和无效等价类中选取有代表性...

  • EIGRP负载均衡

    一、等价负载均衡 EIGRP可做等价负载均衡,也可做不等价负载均衡。默认只做等价的。 EIGRP默认支持4条路径的...

  • 功能类页面&写测试用例

    功能类页面&写测试用例 举例上图的用户名测试方法用户名等价类:有效等价列、无效等价类 有效等价类:1<=用户名<=...

网友评论

      本文标题:SC03 等价

      本文链接:https://www.haomeiwen.com/subject/erwmbctx.html