Comparable 和 Comparator

-Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
自定义排序,涉及到排序的都可以用它们。
我们先定义一个 PersinComparable的类 ,然后实现Comparable 这个接口。
先用标准的Java封装name 和age.
Comparable 和 Comparator
接下来实现Comparable接口,T:传入一个东西,根据什么来排序。
我们就直接传入我们定义的PersinComparable.
Comparable 和 Comparator
PersinComparable有异常,是因为你要实现一个接口之后,要实现接口里面的方法
点击 Add ,它就在下面生成一个方法,Comparable 和 Comparator
生成方法:
Comparable 和 Comparator
CompareTo这个方法就是用来排序的,
假如我们根据年龄排序可以这样写 :
Comparable 和 Comparator
下面我们把元素加进来:
Comparable 和 Comparator
-接下来还不能直接打印,不然会出问题,原因是List里面每个都是对象,只能告诉你里面是什么哈希值
是什么,具体东西无法看到。

Comparable 和 Comparator
在下面遍历一下:
Comparable 和 Comparator
-如果不排序就是添加默认的顺序.
Comparable 和 Comparator
在元素的下面写,排序调用的工具类Collections:从小到大排序了。
Comparable 和 Comparator
不过这样不够完善,我们让人名也排序,写判断:
Comparable 和 Comparator
如果它是ABC就按自然顺序排,如果是中文就按照编码表来排。这样就让它有顺序,对比如图:
人名没排序的:Comparable 和 Comparator
排序后: Comparable 和 Comparator
-Comparator:是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。
和上面的方法相同;主要调用的是另外一个东西,
T:传入要排序的对象
Comparable 和 Comparator
出现异常直接点击生成内部对象:
Comparable 和 Comparator
生成方法:Comparable 和 Comparator
-O1对应PersinComparable的this,o2对应PersinComparable的o
Comparable 和 Comparator
Comparable和Comparator区别比较:
这两种写法效果是一模一样。Comparator是不需要改原方法的,它只需要在外部写。如果你是要排序一下 Java原生的类或没法改,不好修改的类可以用它。
Comparable是要改一下类的。自己定义的,想少写Comparator用
Comparable定义到内部。