1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Collections.sort()泛型集合排序的使用 和自定义类实现Comparable<T>接口重写compa

Collections.sort()泛型集合排序的使用 和自定义类实现Comparable<T>接口重写compa

时间:2018-12-23 06:40:41

相关推荐

Collections.sort()泛型集合排序的使用 和自定义类实现Comparable<T>接口重写compa

Collections算法类

1.Collections类是Java提供的一个集合操作工具类。

2.Collections类定义了一系列用于操作集合的静态方法,用于实现对集合元素的排序、查找和替换等操作。

3.Collections和Collection是不同的,前者是集合的操作类,后者是集合接口

Collections的常用静态方法(不是所有的方法)

1.sort(集合对象):排序

2.binarySearch(集合对象):折半查找——返回查找对象下标位置

3.max(集合对象) \ min(集合对象):查找最大\最小值——返回查找到的对象

Collections排序

1.实现一个类的对象之间比较大小,该类要实现Comparable<T>接口(T为通配符,匹配一个类型,实现该接口需要传入实现类作为泛型约束

2.重写Comparable<T>接口public int compareTo(T o)方法

3.实现方法返回值约定:如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数

Collections排序案例:

学生类Student实现了Comparable<Student>接口,重写 compareTo(Student o)方法,通过比较学号实现对象之间的大小比较。

注意

1. 使用Collections.sort(集合对象)排序时,如果集合中存的是Java自带的类型的数据,如Integer,则不需要该类型内实现Comparable<T>接口(阅读源码可发现其内部已自动实现接口重写方法),如果是自定义类型,如num类,Student类,则需要实现Comparable<T>并重写 public int compareTo(T o)方法。

2.调用Collections.max和min不需要先排序,但是如果使用折半查找则必须先Collections.sort(集合对象)排序,不然折半查找不论是否存在都返回-1;

3.实现compareTo(T o)方法,我们只要根据要求,对传入参数的相关数值进行判断比较,并返回相应的负整数零或者正整数即可,不需要关心比大小的具体实现,因为调用Collections.sort()方法后,其工具类会有相应的方法调用我们重写好的compareTo(T o)方法来使用。

实际操作

public class Test {public static void main(String[] args) {//创建集合并添加值List list = new ArrayList();list.add(new num(3));list.add(new num(2));list.add(new num(1));//调用排序方法Collections.sort(list);//输出排序后结果for (Object o: list) {System.out.println(((num)o).getNum());}System.out.println();//输出最大最小值System.out.println(((num)Collections.max(list)).getNum());System.out.println(((num)Collections.min(list)).getNum());System.out.println();//输出一个类型的在集合中的下标位置System.out.println((Collections.binarySearch(list,new num(1))));System.out.println();}}class num implements Comparable<num>{private int num;public num(int num) {this.num = num;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}/** 重写的compareTo(num o)方法* 如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。* 该对象:this,调用次方法的对象* 指定对象:参数传进来的对象* */@Overridepublic int compareTo(num o) {return this.num>o.num?1:this.num==o.num?0:-1;}}

运行后效果,先排序后遍历输出,后输出最大最小值,再输出一个指定对象所在集合的下标

自定义排序规则

以此案例为例子解释

如果我们不想比学生的学号大小,假如现在要求按照学生成绩排序,那我们就根据成绩排序来做一个成绩排行榜,只需要在 compareTo 方法中把比较的参数换一下就行,比如原本是调用num这个属性,换成 this.age 和 参数对象.age 比较即可。

(此工具类有一个很好地特性,如果比较成绩,两个成绩相同,则会比较与之相邻的下一个数值型的值,判断大小来以此排列)

偏实用派的人推荐直接看这篇文章,言简意赅:Collections comparable_Azadoo的博客-CSDN博客

Collections.sort()泛型集合排序的使用 和自定义类实现Comparable<T>接口重写compareTo(T o)方法完成Collections.sort()排序 以及自定义排序规则

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。