赞
踩
目录
Comparable接口中只存在一个 compareTo 抽象方法.
public interface Comparable<T>:
<T> 这是泛型, 之后会进行介绍.
public int compareTo(T o):
返回值是 int 型, 可以简单理解为(并不准确, 根据实际情况来比较数据)
this.数据 > o.数据, 返回 正整数.
this.数据 < o.数据, 返回 负整数.
this.数据 = o.数据, 返回0.
在实现类中重写 compareTo 抽象方法.
直接通过对象的引用 来访问成员方法.
可以发现, compareTo方法的使用相对固定, 因为 调用者是通过直接调用compareTo方法来进行比较, 而不是通过传入比较器. 从而导致无法在 调用方法的时候, 让使用者来决定 根据什么来进行比较.
接下来, 我们来解决这个问题.
让使用者决定 根据什么来进行比较.(传入比较器)
Comparator接口中有多个抽象方法, 但是在实现类中只需要重写 compare 抽象方法.
(因为其他的抽象方法 在实现类中都会进行默认重写)(调用的是Object类中的equals方法)
以下是 C知道的回答:
Comparator接口是Java提供的一个用于比较两个对象大小的接口,它有多个抽象方法,包括compare、equals、reversed等方法。其中,compare方法是必须要实现的,用于比较两个对象的大小。其他的抽象方法则是为了方便用户使用而添加的,可以根据需要选择性地实现。
在实现Comparator接口时,一般只需要重写compare方法就可以了。因为其他抽象方法都有默认实现,如果不需要特别的功能,就可以直接使用默认实现。而且,如果在实现类中没有重写equals或reversed等方法,也不会影响到compare方法的正常使用。
这样就灵活了, 调用者在使用的时候传入比较器就可以调用指定的方法进行比较.
Cloneable接口是一个空接口, 也叫做标记接口, 如果一个类实现了Clonable接口, 表示这个类可以被克隆.
使用 clone 方法来实现浅拷贝 与 深拷贝.
浅拷贝与深拷贝只与实现的代码有关.
表示Person这个类可以被克隆.
在实现类中只是调用了Object类中的clone方法, 最终是通过 父类 Object中的clone方法来实现具体的克隆操作.
注意 clone方法的返回值是 Object 类型, 需要进行 向下转型.
在上述的浅拷贝中, 并没有对person1中的 money.money 进行克隆, person1和 person2使用的都还是 原来的 money.money.
这时, 对 person2中的money.money进行修改, 会影响 person1中的money.money.
这是不合理的, 此时需要进行深拷贝.
表示Money这个类可以被克隆.
a. Comparable接口 与 compateTo方法 (较固定, 无比较器, 类的实现者实现好了, 调用者来使用)
b. Comparator接口 与 compare方法 (更灵活, 提供比较器, 调用者可以根据实际情况传入比较器进行比较)
c. Cloneable接口 (空接口, 标记接口, 表示这个类可以被克隆)
d. clone方法(深浅拷贝, 深浅拷贝只和实现的代码有关)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。