zoukankan      html  css  js  c++  java
  • eqauls方法和hashCode方法

    1、Java中eqauls方法和hashCode方法

    (1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同

    (2)如果两个对象的hashCode相同,它们并不一定相同(不一定是同一对象)

    如果违背了上述原则就会发现在使用容器时,相同的对象可以出现在同一个Set集合(Set不能存储相同的元素)中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)

    2、equals方法的特性

    (1)自反性

    x.equals(x):true

    (2)对称性

    x.equals(y)返回true时,y.equals(x)也必须返回true

    (3)传递性

    x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true

    (4)一致性

    当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值,而且对于任何非null值的引用x,x.equals(null)必须返回false

    3、实现高质量的equals方法的诀窍

    (1)使用==操作符检查“参数是否为这个对象的引用”

    (2) 使用instanceof操作符检查“参数是否为正确的类型”

    (3)对于类中的关键属性,检查参数传入对象的属性是否与之相匹配

    (4) 编写完equals方法后,问自己它是否满足对称性、传递性、一致性

    (5)重写equals时总是要重写hashCode

    (6)不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解

     public boolean equals(Object obj) {
            // 判断当前对象和传递的对象
            if (this == obj) {
                return true;
            }
            // 判断传递进来的对象是否是Person类型
            if (!(obj instanceof Person)) {
                return false;
            }
            // 将obj向下转型为Perosn引用,可以访问Person特有内容,否则只能访问共有内容
            Person p = (Person) obj;
            return this.age == p.age && this.name == p.name;
        }
  • 相关阅读:
    Android获取两条线之间的夹角度数
    Android字体度量(FontMetrics)
    Android下如何计算要显示的字符串所占的宽度和高度
    Android 颜色渲染PorterDuff及Xfermode详解
    从输入URL到页面加载的全过程
    滚动优化
    常用的前端相关chrome插件
    DNS预解析prefetch
    资源预加载preload和资源预读取prefetch简明学习
    使用chrome开发者工具中的performance面板解决性能瓶颈
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12722440.html
Copyright © 2011-2022 走看看