首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

​第3章 对于所有对象都通用的方法

”逻辑相等”的测试功能 超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的(要小心) 类是私有的或是包级私有的,可以确定它的equals方法永远不会被调用 (不懂为什么) 讲得怪怪的 PS...,这个时候我们就需要按需重写equals 通用约定 重写equals的时候就必须要遵守它的通用约定 equals方法实现了等价关系(equivalence relation): 自反性(reflexive...第12条 考虑实现Comparable接口 注意compareTo不是Object的方法,而是Comparable接口的方法: public interface Comparable{ int...compareTo(T t); } compareTo的约定跟equals类似: PS:符合sgn(表达式)表示数学中的signum函数,它根据表达式(expression)的值为负值、零、和正直,分别返回...如果不想写compareTo或者类并没有实现Comparable接口的可以自定义一个Comparator类来进行比较。 需要注意,排序是不允许出现逻辑漏洞的,否则会crash!

52320

笔记《Effective Java》02:对所有对象都通用的方法

总而言之,除非迫不得已,否则不要重写equals方法。多数情况下,从Object继承的equals实现就能满足。...3、重写equals方法时应该总是重写hashCode方法重写equals方法的每个类都必须重写hashCode。...compareTo 方法与 equals 类似,但它不仅支持相等性比较,还允许顺序比较,同时它是泛型的。通过实现 Comparable 接口,一个类表明其实例具有自然顺序。...实现Comparable接口如下:public interface Comparable { int compareTo(T t);}编写 compareTo 方法类似于编写 equals...在CompareTo方法地实现中,当比较字段的值时,应该避免使用和>运算符。相反,请使用基本类型的封装类中的静态compare方法,或使用Comparator接口中的比较器构造方法。

7210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java基础面试题-可能读了个假书?

    文章目录 Java基础 字符型常量和字符串常量 重载和重写的区别 成员变量与局部变量 ==和equals() hashcode()和equals() transient关键字 BIO、NIO和AIO Java...集合 ArrayList和LinkedList HashMap和HashTable HashMap底层实现 comparable和comparator 小结 Java基础 字符型常量和字符串常量 字符常量是单引号引起的一个字符...重写:是当子类继承自父类的相同方法,输入数据一样,但是要做出的和父类不一样的响应时,就要重写父类方法。重写是子类堆父类的重新改造,外部样子不能改变,但是可以改变内部逻辑。...hashcode()和equals() 你知道为什么重写equals()方法必须重写hashcode()方法吗?...AIO(Asynchronous I/O,异步非阻塞模式),异步I/O是基于回调机制实现的,也就是应用操作之后会直接返回,而不是阻塞在那里,当后台处理完成后,操作系统会通知相应的线程进行后续的操作。

    1K50

    c语言从入门到实战——回调函数与qsort的讲解和模拟实现

    回调函数与qsort的讲解和模拟实现 前言 回调函数是一个函数,它作为参数传递给另一个函数,并且能够在该函数内部被调用。在C语言中,回调函数通常被用于实现事件处理和排序算法中。...通过模拟实现qsort,可以更好地理解回调函数在排序算法中的应用,以及如何使用自定义的比较函数来满足不同的排序需求。 总之,回调函数在编程中是一种强大的技术,它使得代码更加灵活和可重用。...C语言中,回调函数是指将一个函数作为参数传递给另一个函数,并在后者中被调用的函数。 一般情况下,回调函数被用来在程序中实现事件处理和消息传递等机制。...最后,我们通过调用 accept_callback 函数,并传入一个整数以及回调函数的指针,实现了回调函数的调用和结果输出。...需要注意的是,回调函数的实现和使用需要满足一定的约定,例如回调函数的参数和返回值类型需要与被调用函数的要求一致,否则会导致程序运行错误。 回调函数就是一个通过函数指针调用的函数。

    13110

    Comparable 和 ComparatorComparable 自然排序

    (e2) < 0 即 e1 < e2 1.由于 null 不是一个类,也不是一个对象,因此在重写 compareTo 方法时应该注意 e.compareTo(null) 的情况,即使 e.equals...(null) 返回 false,compareTo 方法也应该主动抛出一个空指针异常 NullPointerException 2.Comparable 实现类重写 compareTo 方法时一般要求...的 size 也不会增加,因为在 SortedSet 看来它们是相同的 实际上所有实现了 Comparable 接口的 Java 核心类的结果都和 equlas 方法保持一致 实现了 Comparable...有些场景下equals和compareTo 结果要保持一致,这时候不重写equals(),使用 Object.equals 方法得到的结果会有问题,比如说HashMap.put(),会先调用 key 的...equals ()进行比较,然后才调用 compareTo 后面重写 compareTo 时,要判断某个相同时对比下一个属性,把所有属性都比较一次。

    75870

    java基本程序设计

    数据>算法的思想 对象 使用面向对象编程清楚对象三个主要特征 对象的状态 对象的行为 对象的标识 面向对象编程不同于面向过程从设计类开始 3.类之间关系有依赖、聚合、继承 如果返回一个可变对象的引用...需要重写equals方法来判断两个对象是否相等 public boolean equals(Object otherObject){ if(this == otherObject...接口 public interface Comparable{ int compareTo(Object object) } // 任何实现Comparable接口的类都包含compareTo...(salary,other.salary); } 如果想做的更好可以为compareTo的参数设置范型 接口不能被实例化 instance 检查某个对象是否实现了某一个接口,instanceof检查对象是否继承另一个对象...内部类可以对同一包中的其他对象隐藏起来 当定义一个回调韩硕不想写大量的代码,使用匿名内部类比较便捷 使用内部类访问对象状态

    51820

    面试:如何决定使用 HashMap 还是 TreeMap?

    HashMap的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。...除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 1、HashMap 和 TreeMap 的实现 HashMap: 基于哈希表实现。...使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。...AbstractMap抽象类: 覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。...3、TreeMap中默认是按照升序进行排序的,如何让他降序 通过自定义的比较器来实现 定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo

    1.4K10

    Java 解惑:Comparable 和 Comparator 的区别

    { public int compareTo(T o); } Comparable 可以让实现它的类的对象进行比较,具体的比较规则是按照 compareTo 方法中的规则进行。...< 0 即 e1 < e2 注意: 1.由于 null 不是一个类,也不是一个对象,因此在重写 compareTo 方法时应该注意 e.compareTo(null) 的情况,即使 e.equals...2.Comparable 实现类重写 compareTo 方法时一般要求 e1.compareTo(e2) == 0 的结果要和 e1.equals(e2) 一致。...实际上所有实现了 Comparable 接口的 Java 核心类的结果都和 equlas 方法保持一致。...感谢 @li1019865596 指出,这里我想表达的是在有些场景下 equals 和 compareTo 结果要保持一致,这时候不重写 equals,使用 Object.equals 方法得到的结果会有问题

    2K100

    面试官:如何决定使用 HashMap 还是 TreeMap?

    HashMap的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。...除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 1、HashMap 和 TreeMap 的实现 HashMap: 基于哈希表实现。...使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。...AbstractMap抽象类: 覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。...3、TreeMap中默认是按照升序进行排序的,如何让他降序 通过自定义的比较器来实现 定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo

    40320

    如何决定使用 HashMap 还是 TreeMap?

    HashMap的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。...除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 1、HashMap 和 TreeMap 的实现 HashMap:基于哈希表实现。...使用HashMap要求添加的键类明确定义了hashCode()和equals()可以重写hashCode()和equals(),为了优化HashMap空间的使用,您可以调优初始容量和负载因子。...AbstractMap抽象类:覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。...3、TreeMap中默认是按照升序进行排序的,如何让他降序 通过自定义的比较器来实现 定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo

    79620

    3. 如何决定使用 HashMap 还是 TreeMap?

    HashMap的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。...除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 HashMap 和 TreeMap 的实现 HashMap:基于哈希表实现。...使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。...**AbstractMap 抽象类:**覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。...TreeMap中默认是按照升序进行排序的,如何让他降序 通过自定义的比较器来实现,定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo

    8410

    java安全编码指南之:方法编写指南

    重写equals()方法 考虑一下父类和子类的情况,如果在父类中我们定义了一个equals方法,这个方法是根据父类中的字段来进行比较判断,最终决定两个对象是否相等。...04 consistent一致性 对于Object a,b来说,如果a和b没有发生任何变化,那么a.equals(b)的结果也不能变。...compareTo方法的实现 我们在实现可比较类的时候,通常需要实现Comparable接口。Comparable接口定义了一个compareTo方法,用来进行两个对象的比较。...我们在实现compareTo方法的时候,要注意保证比较的通用规则,也就是说,如果x.compareTo(y) > 0 && y.compareTo(z) > 0 那么表示 x.compareTo(z)...所以,我们不能使用compareTo来实现特殊的逻辑。 最近看了一个日本的电影,叫做dubo默示录,里面有一集就是石头,剪刀,布来判断输赢。

    32841

    Java中摆脱equals,compareTo和toString

    我们都曾在POJO中重写过equals(),compareTo()和toString()方法。但是另有其他能做到职责分离的更好的方法并带来更简洁的代码。阅读这篇文章来一探究竟吧!...更简明的职责——摆脱equals、compareTo和toString方法 你曾经查看过java文档中的Object类吗?也许吧。每当你向上追溯继承树的时候都会止步于这个类。...事实上,当你准备将对象存储在一些容器中,如HashMap,并且想要控制哈希冲突的时候,实现你自己的.equals()方法和.hashCode()方法确实有它的意义,但实现compareTo()和toString...Person 类实现了一些方法来控制输出。 hashCode()和equals() 方法确保同一个person对象不会被重复添加到set中。.compareTo() 方法用于排序方法中生成应有的顺序。...我们可以删除所有equals(),hashCode(),compareTo()和toString()的样板式代码,取而代之的是下面介绍的两个静态变量:COMPARATOR 和TO_STRING。

    65320

    Java中摆脱equals,compareTo和toString

    我们都曾在POJO中重写过equals(),compareTo()和toString()方法。但是另有其他能做到职责分离的更好的方法并带来更简洁的代码。阅读这篇文章来一探究竟吧!...更简明的职责——摆脱equals、compareTo和toString方法 你曾经查看过java文档中的Object类吗?也许吧。每当你向上追溯继承树的时候都会止步于这个类。...事实上,当你准备将对象存储在一些容器中,如HashMap,并且想要控制哈希冲突的时候,实现你自己的.equals()方法和.hashCode()方法确实有它的意义,但实现compareTo()和toString...Person 类实现了一些方法来控制输出。 hashCode()和equals() 方法确保同一个person对象不会被重复添加到set中。.compareTo() 方法用于排序方法中生成应有的顺序。...我们可以删除所有equals(),hashCode(),compareTo()和toString()的样板式代码,取而代之的是下面介绍的两个静态变量:COMPARATOR 和TO_STRING。

    63220

    抽象类与接口(3)(接口部分)

    在这了解了内部之后我们只需要知道其string.compareTo的作用为 compareTo方法的实现会按照Unicode值的比较。...在重写的clone()方法中,我们通过调用父类的clone()方法来实现对象的浅拷贝。...对于该重写方法我们可以通过快捷键自动生成equals重写方法: 对于该代码,在正常情况下我们主要考虑最后一段代码 我们观察下objects.equals的内部代码 这里有疑惑的是又出现了equals,如果这里的...a和b是普通类的话,那么它们直接比较地址不就返回false,结果不又是一直false的吗,所以我们引出下文: 在String类中,equals跟compareTo一样都被重写了,为上图代码。...所以只要是有String类.equals方法,那么就会引用String类中的equals的重写方法,从而判断字符串是否相等。

    9110
    领券