zoukankan      html  css  js  c++  java
  • Effective java 第三章对于所有对象都通用的方法(一) 读书笔记

     对于所有对象都通用的方法

    覆盖equals时请遵守通用约定

    类的每个实例本质上都是唯一的。
    不关心类是否提供了逻辑相等的测试功能
    超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的。
    类是私有的或是包级私有的,可以确定它的equals方法永远不会被调用。
    throw new AssertionError()

    一般覆盖Object.equals都是值类
    但有一种值类不需要覆盖equals方法,即实例受控,确保每个值至多只存在一个对象的类。如枚举

    覆盖equals方法,通用约定。
    自反性
    对称性
    传递性
    一致性
    非空性

    里氏替换原理
    一个类型的任何重要属性也将适用于它的子类型。

    实现高质量equals方法的诀窍
    1.使用==操作符检查“参数是否为这个对象的引用”
    2.使用instanceof操作符检查“参数是否为正确的类型”
    3.把参数转换成正确的类型
    4.对于该类中的每个“关键域”,检查参数中的域是否与该对象中对应的域相匹配。

    覆盖equals时总要覆盖hashCode
    不要企图让equals方法过于智能
    不要将equals声明中的Object对象替换为其他的类型。

    覆盖equals时总要覆盖hashCode
    约定:
    在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一地返回同一个整数。在同一个应用程序的多次执行过程中,每次执行所返回的整数可以不一致。
    如果对象根据equals(Object)方法比较是相等的,那么调用这两个对象中任意一个对象的hashaCode方法都必须产生同样的整数结果。
    如果两个对象根据equals(Object)方法比较是不相等的,那么调用这两个对象中任意一个对象的hashCode方法,则不一定要产生不同的整数结果。但是程序员应该知道,给不相等的对象产生截然不同的整数结果,有可能提高散列表的性能。

    hash.put
    hash.get
    得不到

    编写一个合法但并不好用的hashCode方法没有任何价值

    在散列码的计算过程中,可以把冗余域排除在外。

  • 相关阅读:
    mysql基本操作
    http基础
    react进阶第一讲jsx
    react进阶第二讲——component
    WC2020游记
    数据库实验小结 Resource Manager
    latex 常用小结
    编程之美2013资格赛 水结
    百度电影推荐系统比赛 小结 ——记我的初步推荐算法实践
    10.10作业
  • 原文地址:https://www.cnblogs.com/carrier/p/7266294.html
Copyright © 2011-2022 走看看