在学习完Java接口后,发现有三个接口是比较重要的,并且是经常使用的接口,下面进行总结。
1:Comparable接口
Comparable接口是泛型类接口,一个类创建的时候用implements来接Comparable<>,并在尖括号里面传入需要比较的类,且重写compareTo方法,重写compareTo方法是为了后续对该类进行排序要所要依靠什么来排序,例如下面进行age排序,默认情况下,this在前,o在后所差得到的是从小到大排序。
但是所比较的类型是String的时候,需要用到String类里面的比较方法,而不是直接加减:
即:当进行二者做差或者通过compareTo方法得到的数值是大于0则进行从小到大排序,当为小于0则进行从大到小排序。
但是这样如此修改类里面的变量会使得操作者对类的侵入性较强,所以下面介绍一种接口,不需要在待排序的对象里面修改需要排序的依据,而是直接自行定义一个比较器。
2:Comparator接口
Comparator也是接口,需要用implements关键字进行接入,跟上述Comparable接口一样,是泛型接口,需要在尖括号里面传入需要排序的类,定义方式如下:
比较器在优先级队列中很常见,如图:
3:Cloneable接口
该接口是一个空接口,即又名标记接口,里面没有方法意味着不需要重写该接口的方法。
但是该接口是必要的,因为一个类可以被克隆的条件是接入Cloneable接口,意味着该类可被克隆,然后因为所有的类都是继承于Object类,在Object类里面有一个clone()方法,所以我们可以 重写clone()方法:
这样子该自定义的类就可以使用clone()方法了,然后在克隆里面有区分深克隆和浅克隆。
浅克隆:意思是在一个类中,若类里面的成员变量没有引用对象,则直接将该类进行克隆,克隆方法如下:
深克隆:如果一个类里面还有其他的类对象,此时使用以上方法克隆的话,不能将作为成员变量的对象进行拷贝,而只是原班不动地复制引用地址,所以,深度克隆就意味着不只是将该类进行克隆,还要将该类里面的作为成员变量的对象进行克隆:
红圈圈起来的就是作为成员变量的对象,需要将其进行克隆的话,也要将该类变成可克隆的,因此也需要接入接口Cloneable接口,然后重写Object类的clone方法:
然后进行克隆: