1.比较
(1)Comparable接口:(重写compareTo方法)
由于它是一个接口,而且在这个接口中只有一个compareTo方法,所以所有实现该接口的类都需要重写。这个compareTo方法相当于制定一个比较标准,有了这个比较标准我们才能对自定义的类中的任意可比较属性将该类的的对象进行排序。例如现在有一个班学生班主任需要按照总成绩高低来排序,而语文老师需要得到一份语文成绩高低的学生排序,这个时候就是针对不同属性进行排序,所以这个接口在比较中比较常用到,但是有一个缺点,它不能灵活的制定比较标准,compareTo方法一旦写成,一般最好不要进行修改。
eg:这里的compareTo是按照从小到大来排序的:
现要按照学生总成绩从小到大进行排序:
最终运行结果:
(2)Comparator:(重写compare方法)
这个叫做比较器,使用者可以创建一个类来实现这个接口,重写compare方法,然后这个类是作为参数在比较是传递给sort。这种比较的方法就是比较灵活,不像Comparable一样,标准最好不要修改,你想根据那个属性比较就传哪个比较器给到sort。
eg:
ps:在实现NameComparator比较器时,里面的compare使用了compareTo方法,这里用的是String里面重写的compareTo重写的方法,这是字符串String类提供的重写方法,用来比较两个字符串之前的大小(按字母顺序表)
先实现两个比较器一个是按学生英文成绩进行排序,一个是按照名字来排序(字母表顺序)。
很明显看到这个是要求按照名字来排序,所以运行结果为:
很明显看到这个是要求按照名字来排序,所以运行结果为:
2.克隆:(拷贝)
用到Cloneable接口,该接口中没有任何方法,但是必须要重写clone方法的,否则无法实现clone方法。它是一个空接口,空接口也叫做标记接口,如果一个类实现了该接口,就表示当前类是可以被复制的。有浅拷贝和深拷贝两种:
(1)浅拷贝:
eg1:只是对Person对象及进行了clone,但是里面的各种属性还是共用的同一份。
运行结果:
当对person1中的money的m修改时,person2中的也会跟着一起被修改!!!
图解分析:
(2)深拷贝:
eg2:即对person进行clone也对person对象中的money也进行clone。
运行结果:
这里将person中的mone单独克隆了一份给person2对象。
图解分析: