Comparable 和 Comparator
-Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
自定义排序,涉及到排序的都可以用它们。
我们先定义一个 PersinComparable的类 ,然后实现Comparable 这个接口。
先用标准的Java封装name 和age.
接下来实现Comparable接口,T:传入一个东西,根据什么来排序。
我们就直接传入我们定义的PersinComparable.
PersinComparable有异常,是因为你要实现一个接口之后,要实现接口里面的方法
点击 Add ,它就在下面生成一个方法,
生成方法:
CompareTo这个方法就是用来排序的,
假如我们根据年龄排序可以这样写 :
下面我们把元素加进来:
-接下来还不能直接打印,不然会出问题,原因是List里面每个都是对象,只能告诉你里面是什么哈希值
是什么,具体东西无法看到。
在下面遍历一下:
-如果不排序就是添加默认的顺序.
在元素的下面写,排序调用的工具类Collections:从小到大排序了。
不过这样不够完善,我们让人名也排序,写判断:
如果它是ABC就按自然顺序排,如果是中文就按照编码表来排。这样就让它有顺序,对比如图:
人名没排序的:
排序后:
-Comparator:是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。
和上面的方法相同;主要调用的是另外一个东西,
T:传入要排序的对象
出现异常直接点击生成内部对象:
生成方法:
-O1对应PersinComparable的this,o2对应PersinComparable的o
Comparable和Comparator区别比较:
这两种写法效果是一模一样。Comparator是不需要改原方法的,它只需要在外部写。如果你是要排序一下 Java原生的类或没法改,不好修改的类可以用它。
Comparable是要改一下类的。自己定义的,想少写Comparator用
Comparable定义到内部。