哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流学习,互相学习,才能成长的更快,对吧。
我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
论前几期啊,我们是分别讲了Object类
、Date类
、FormDate类
、Calendar类
、System类
及StringBuilder类
,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
在前几期,我们是有讲过Collection类的,不知道大家还是否有印象,我们都知道,Collection分为两类,一类是单列集合,一类是双列集合。
而今天我们就来讲一期Collections工具集使用的下篇,(Collections其包位置:java.utils.Collections),它?与Collection类?不要误解,Collections是一集合工具类,用来对集合进行一系列操作的工具类。
上一期说起Collections所提供的sort()排序api,今天我就要给大家科普下了。Comparable和Comparator这两个接口了。
咱们先来聊聊Comparable吧,首先它是一个泛型接口。其次在Java类库中:Byte,Short,Integer,Long,Float,Double、及Date类等都有实现这Comparable接口,这些基本类型对象都可以直接调用实现了Comparable接口的compareTo()方法来进行排序。
比如如下Integer源码截图:
再比如如下的Date类源码截图:
具体使用:我就以Date()类来进行演示啦。
演示代码如下:
@Test
public void testSortCom() throws ParseException {
//获取当前时间
Date date = new Date();
System.out.println("time1= " + date);
//定义一个时间与当前时间进行比较
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date privateDate = format.parse("2022-05-20");
System.out.println("time2= " + privateDate);
//比较时间大小,若两相等返回0,大于返回1,小于返回-1。
int res = date.compareTo(privateDate);
System.out.println("time1与time2比较结果为:" + res);
}
演示代码执行结果截图如下:
Comparable强行对实现它的每个类的对象进行整体排序,像这种就是类的自然排序,compareTo()方法就被称为Comparable接口的自然比较方法。其方法只能在类中实现一次,不能经常修改类的代码从而实现自定义排序,局限还是比较大的。
像实现此接口的数组和集合,可以通过通过Collections.sort() 或Arrays.sort()进行自动排序,但你说要实现集合中的自定义的对象排序,就没法直接使用Collections.sort()方法了,编译期不知道按照什么规则来进行排序,直接使用肯定报错,这个时候你就得用到Comparable接口了。
因此Comparable常被称为内比较器。
拓展:
int CompareTo(T object)
Java提供Comparable接口就是为了解决比较两个对象的问题。
其方法相对于比较对象的顺序,小于返回负整数,等于返回0,大于返回正整数。
上述是讲了Comparable接口,接下来就是Comparator。与上面讲的Comparable接口所不同的是:Comparator位于java.util包下,而Comparable位于java.lang包下;而且Comparable接口是将比较代码嵌入到需要进行比较的类的自身代码中,像我列举的Integer、Double等,它们都是直接实现了Comparable接口的CompareTo()方法,而Comparator接口不同,它的使用是在一个独立的类外进行实现比较的,不但提供了升序降序排序法,还不强制排序规则,可自定义指定排序规则,比如按年龄排序,按首字母排序等。
该接口定义如下:
package java.util;
public interface Comparator{
int compare(T o1, T o2);
boolean equals(Object obj);
}
1、若一个类实现Comparator接口;它一定要实现compare(T o1, T o2) 方法,可以不实现 equals(Object obj) 方法。
2、其中int compare(T o1, T o2) 方法比较的是o1和o2的大小。若比较结果返回“负数”,表示o1比o2小;返回“零”,表示o1等于o2;返回“正数”,表示o1大于o2。
... ...
好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
-------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
-------------------------------------------