这篇文章主要介绍了详解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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。