JAVA中Collections工具类sort()排序方法
本问介绍了Collections工具类两种sort()方法,具体如下:
一、Collections工具类两种sort()方法
格式一:publicstatic<TextendsComparable<?superT>>voidsort(List<T>list)
说明:该方法中的泛型<T>都是Comparable接口的子类,即只有是Comparable接口子类类型的数据,才能进行比较排序。如果其他类型的数据要进行比较排序,必须继承Comparable接口并
覆写equals()和compareTo()方法。其中如String类、Integer类都是Comparable接口子类,可以进行排序,而基本类型不能进行sort排序。比较项目在类内指定
格式二:publicstatic<T>voidsort(List<T>list,Comparator<?superT>c)
说明:该方法中指定比较方式Comparator<?superT>c,即c必须实现Comparator<?superT>接口,覆写compareTo()方法指定比较项目。比较项目在类外指定,比较灵活
二、示例
示例中获取字符串和数字的公用方法:
/**
*生成随机不重复的字符串:number生成字符串个数
*/
publicstaticList<String>generateString(intnumber){
List<String>listString=newArrayList<>();//用于存放返回值
List<Integer>length=null;//字符串长度
StringBuffersb=newStringBuffer();//中间变量
intcontrol=0;//控制个数
String[]chars=newString[]{"a","b","c","d","e","f","g","h",
"i","j","k","l","m","n","o","p","q","r","s","t",
"u","v","w","x","y","z","0","1","2","3","4","5",
"6","7","8","9","A","B","C","D","E","F","G","H",
"I","J","K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z"};
while(true){
//控制结束
if(control==number){
break;
}
//生成随机数,生成36位的2aaab761-4341-4968-aceb-3861ee3824b2UUID类型数据
Stringuuid=UUID.randomUUID().toString().replace("-","");
sb.setLength(0);
//获得随机字符串长度,长度不为0
do{
length=getDiffNo(1,11);
}while(length.get(0)==0);
//拼凑字符串
for(inti=0;i<length.get(0);i++){
Stringstr=uuid.substring(i*3,(i*3+3));
//将str字符串转换为16进制,获得其值
intx=Integer.parseInt(str,16);
//取余:x%0x3E--0x3E=3*16+14=62,其中chars有62个字符
sb.append(chars[x%0x3E]);
}
listString.add(sb.toString());
control++;
}
returnlistString;
}
/**
*生成随机不重复的数字:n生成个数max生成范围
*/
publicstaticList<Integer>getDiffNo(intn,intmax){
//生成[0-n]个不重复的随机数
//list用来保存这些随机数
List<Integer>list=newArrayList<>();
Randomrandom=newRandom();
Integerk;
for(inti=0;i<n;i++){
do{
k=random.nextInt(max);
}while(list.contains(k));
list.add(k);
}
returnlist;
}
1、对Integer泛型的List进行排序
/**
*1.通过Collections.sort()方法,对Integer泛型的List进行排序;
*创建一个Integer泛型的List,插入十个100以内的不重复随机整数,调用Collections.sort()方法对其进行排序
*2.排序规则:先数字后字母,数字0-9,字母A-Za-z的顺序
*/
publicvoidlistIntegerSort(){
//插入十个100以内的不重复随机整数
List<Integer>integerList=getDiffNo(10,100);
System.out.println("-------------排序前--------------");
for(Integerinteger:integerList){
System.out.println("元素:"+integer);
}
Collections.sort(integerList);
System.out.println("----------------排序后-------------------");
for(Integerinteger:integerList){
System.out.println("元素:"+integer);
}
}
2、对String泛型的List进行排序
/**
*1.对String泛型的List进行排序;创建String泛型的List,添加乱序的String元素,
*调用sort方法,再次输出排序后的顺序
*/
publicvoidlistStringSort(){
List<String>stringList=newArrayList<String>();
stringList.add("eipJlcx");
stringList.add("WvQRufC");
stringList.add("J");
stringList.add("HdaU2G");
stringList.add("M0WswHD3");
System.out.println("------------排序前-------------");
for(Stringstring:stringList){
System.out.println("元素:"+string);
}
Collections.sort(stringList);
System.out.println("--------------排序后---------------");
for(Stringstring:stringList){
System.out.println("元素:"+string);
}
}
/**
*对String泛型的List进行排序,要求随机生成10个的不重复字符串,字符串的长度在10以内
*/
publicvoidlistStringRandomSort(){
//生成随机字符串
List<String>listString=generateString(10);
System.out.println("--------------排序前---------------");
for(Stringinteger:listString){
System.out.println("元素:"+integer);
}
//排序
Collections.sort(listString);
System.out.println("----------------排序后------------------");
for(Stringinteger:listString){
System.out.println("元素:"+integer);
}
}
3、对其他类型泛型的List进行排序
Course类实现
/**
*课程类
*@authorAdministrator
*
*/
publicclassCourse{
publicStringid;
publicStringname;
publicCourse(Stringid,Stringname){
this.id=id;
this.name=name;
}
publicCourse(){
}
@Override
publicinthashCode(){
finalintprime=31;
intresult=1;
result=prime*result+((name==null)?0:name.hashCode());
returnresult;
}
@Override
publicbooleanequals(Objectobj){
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
if(!(objinstanceofCourse))
returnfalse;
Courseother=(Course)obj;
if(name==null){
if(other.name!=null)
returnfalse;
}elseif(!name.equals(other.name))
returnfalse;
returntrue;
}
}
Student类实现Comparable接口,类内设置比较项
importjava.util.HashSet;
importjava.util.Set;
/**
*学生类
*@authorAdministrator
*
*/
publicclassStudentimplementsComparable<Student>{
publicStringid;
publicStringname;
publicSet<Course>courses;
publicStudent(Stringid,Stringname){
this.id=id;
this.name=name;
this.courses=newHashSet<Course>();
}
@Override
publicinthashCode(){
finalintprime=31;
intresult=1;
result=prime*result+((name==null)?0:name.hashCode());
returnresult;
}
@Override
publicbooleanequals(Objectobj){
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
if(!(objinstanceofStudent))
returnfalse;
Studentother=(Student)obj;
if(name==null){
if(other.name!=null)
returnfalse;
}elseif(!name.equals(other.name))
returnfalse;
returntrue;
}
@Override
publicintcompareTo(Studento){//设置ID为比较项
//TODOAuto-generatedmethodstub
returnthis.id.compareTo(o.id);
}
}
实现Comparator接口,类外设置比较项
importjava.util.Comparator;
publicclassStudentComparatorimplementsComparator<Student>{
@Override
publicintcompare(Studento1,Studento2){
//TODOAuto-generatedmethodstub
returno1.name.compareTo(o2.name);
}
}
比较Student类
/**
*对其他类型泛型的List进行排序,以Student为例。
*/
publicvoidlistComparatorSort(){
List<Student>studentList=newArrayList<Student>();
List<Integer>list=getDiffNo(4,1000);
studentList.add(newStudent(list.get(0)+"","Mike"));
studentList.add(newStudent(list.get(1)+"","Angela"));
studentList.add(newStudent(list.get(2)+"","Lucy"));
studentList.add(newStudent(1000+"","Beyonce"));
System.out.println("--------------排序前---------------");
for(Studentstudent:studentList){
System.out.println("学生:"+student.id+":"+student.name);
}
//实现Comparator<T>接口,设置ID比较方式
Collections.sort(studentList);
System.out.println("----------------按照ID排序后------------------");
for(Studentstudent:studentList){
System.out.println("学生:"+student.id+":"+student.name);
}
//实现Comparator<T>接口,设置特定比较方式,以name比较排序
Collections.sort(studentList,newStudentComparator());
System.out.println("----------------按照姓名排序后-----------------");
for(Studentstudent:studentList){
System.out.println("学生:"+student.id+":"+student.name);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。