,,详解java Collections.sort的两种用法

,,详解java Collections.sort的两种用法

这篇文章主要介绍了详解Java语言(一种计算机语言,尤用于创建网站)集合。分类的两种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

收集是一个工具类,排序是其中的静态方法,是用来对目录类型进行排序的,它有两种参数形式:

公共静态T扩展可比?超级T空排序(列表列表){

列表。排序(空);

}

public static T void sort(ListT list,Comparator?超级T c) {

列表。排序(c);

}

首先使用基本类型(此处使用整数)来演示第一个方法:

静态list整型int list=arrays。as列表(2,3,1);

私有静态void sortBaseTypeByDefaultMode(){

System.out.println('排序前:');

打印实用程序。showlist(int list);

系统。出去。println('===================');

收藏。sort(int list);

System.out.println('排序后:');

打印实用程序。showlist(int list);

}

PrintUtil.showList是自定义的一个打印目录类型的方法,此处只关心输出结果就行,如下:

可以看到,默认的排序是正序,那么如何实现逆序呢,这就要使用第二种方式了,即通过实现比较仪接口的比较方法来完成自定义排序,代码如下:

私有静态void sortBaseTypeByIDefineMode(){

System.out.println('排序前:');

打印实用程序。showlist(int list);

系统。出去。println('===================');

Collections.sort(intList,new ComparatorInteger() {

@覆盖

公共int比较(整数o1,整数o2) {

//返回值为(同国际组织)国际组织类型,大于0表示正序,小于0表示逆序

返回O2-O1;

}

});

System.out.println('排序后:');

打印实用程序。showlist(int list);

}

可以看到,已经实现了逆序的排序了。

接下来看看自定义类的排序:

定义一个电磁脉冲类:

公共类员工{

私有int empno

私有字符串ename

public int getEmpno() {

返回empno

}

public void setEmpno(int empno) {

this.empno=empno

}

公共字符串getEname() {

返回ename

}

public void setEname(String ename){

这个名字=名字

}

public Emp(int empno,String ename) {

super();

this.empno=empno

这个名字=名字

}

@覆盖

公共字符串toString()

{

return ' empno:\ t ' empno ' \ t name:\ t ' ename;

}

}

首先使用同样的方式来使用集合。排序方法:

定义泛型违电磁脉冲类型的列表:

静态ListEmp员工列表

静电

{

Emp emp1=新电磁脉冲(2,关云长');

Emp emp2=新电磁脉冲(3,张飞');

Emp emp3=新Emp(1,刘备');

empList=Arrays.asList(emp1,emp2,EMP 3);

}

对雇员列表进行排序:

此时会报错:

类型集合中的方法排序(列表)不适用于参数(列表)

意思是参数类型为ListEmp时,排序方法无法执行,原因是泛型没有继承可比较的接口,这种方式稍后再说,我们先使用分类方法的第二种形式:

私有静态void sortEmpByIDefineMode()

{

System.out.println('排序前:');

打印实用程序。显示列表(empList);

系统。出去。println('===================');

Collections.sort(empList,new ComparatorEmp() {

@覆盖

公共(同Internationalorganizations)国际组织比较(雇员o1,雇员o2) {

/*按员工编号正序排序*/

返回O1。getempno()-O2。getempno();

/*按员工编号逆序排序*/

//返回氧气。getempno()-O1。getempno();

/*按员工姓名正序排序*/

//返回o1.getEname().与O2相比。getename());

/*按员工姓名逆序排序*/

//返回o2.getEname().比较(O1。getename());

}

});

System.out.println('排序后:');

打印实用程序。显示列表(empList);

}

运行结果:

根据不同的排序方式即可呈现不同的结果。

让我们来看看第一种形式的实现。首先让Emp类继承Comparable接口,重写compareTo方法(为了和上面的排序方法区分,这次是按员工姓名逆序排列):

公共类Emp实现ComparableEmp{

/*省略属性、getter/setter方法、toString方法和构造方法*/

@覆盖

公共int compareTo(Emp emp) {

/*按员工编号正序排序*/

//返回this . getempno()-EMP . getempno();

/*按员工编号逆序排序*/

//返回EMP . getempno()-this . getempno();

/*按雇员姓名正序排序*/

//返回this.getEname()。compare to(EMP . getename());

/*按员工姓名逆序排序*/

返回emp.getEname()。compare to(this . getename());

}

}

使用Collections.sor方法的第一种形式来实现:

私有静态void sortEmpByDefaultMode()

{

System.out.println('排序前:');

print util . show list(empList);

system . out . println('======================');

collections . sort(empList);

System.out.println('排序后:');

print util . show list(empList);

}

运行结果:

总结:

1.对于String或Integer等已经实现Comparable接口的类,可以直接使用Collections.sort方法传入list参数实现默认方式(正序)排序;

2.如果不想使用默认方法(正序)进行排序,可以通过Collections.sort传入第二个参数类型比较器来自定义排序规则;

3.对于定制类型(如本例中的Emp),如果您想通过Collections.sort进行排序,可以通过实现Comparable接口的compareTo方法来实现。如果没有,参考第2点;

4.4.jdk1.8的比较器接口中有很多新方法,其中一个reversed()方法比较实用,用来切换正序和逆序。代码如下:

私有静态void sortEmpByIDefineMode()

{

System.out.println('排序前:');

print util . show list(empList);

system . out . println('======================');

comparator EMP comparator=new comparator EMP(){

@覆盖

公共int比较(雇员o1,雇员o2) {

/*按员工编号正序排序*/

返回O1 . getempno()-O2 . getempno();

/*按员工编号逆序排序*/

//返回O2 . getempno()-O1 . getempno();

/*按雇员姓名正序排序*/

//返回o1.getEname()。compare to(O2 . getename());

/*按员工姓名逆序排序*/

//返回o2.getEname()。compare to(O1 . getename());

}

};

/*相反顺序的新实现*/

Collections.sort(empList,comparator . reversed());

System.out.println('排序后:');

print util . show list(empList);

}

复制的比较方法定义了按员工号正序排序,反转后的结果如下:

这使得排序规则的切换更加方便。

关于解释java Collections.sort的两种用法的这篇文章到此为止,要了解更多java Collections.sort的相关用法,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: