java使用compareTo实现一个类的对象之间比较大小操作
首先定义一个对象,注意这个对象必须实现Comparable接口,并重写这个接口的compareTo方法
packagecn.demo; publicclassStudentimplementsComparable{ privateintnumber=0;//学号 privateStringname="";//学生姓名 privateStringgender="";//性别 publicintgetNumber(){ returnnumber; } publicvoidsetNumber(intnumber){ this.number=number; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetGender(){ returngender; } publicvoidsetGender(Stringgender){ this.gender=gender; } publicintcompareTo(Objectobj){ Studentstudent=(Student)obj; if(this.number==student.number){ return0;//如果学号相同,那么两者就是相等的 }elseif(this.number>student.getNumber()){ return1;//如果这个学生的学号大于传入学生的学号 }else{ return-1;//如果这个学生的学号小于传入学生的学号 } } }
在上面的重写方法中标红的地方,如果是小于号,则是按照降序排列,但是在我贴上去的代码,则是按升序排列
接下来就是测试类了:
packagecn.demo; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Iterator; publicclassTest{ publicstaticvoidmain(String[]args){ Studentstudent1=newStudent(); student1.setNumber(5); Studentstudent2=newStudent(); student2.setNumber(2); Studentstudent3=newStudent(); student3.setNumber(1); Studentstudent4=newStudent(); student4.setNumber(4); ArrayListlist=newArrayList (); list.add(student1); list.add(student2); list.add(student3); list.add(student4); System.out.println("-------排序前-------"); Iterator iterator=list.iterator(); while(iterator.hasNext()){ Studentstu=iterator.next(); System.out.println(stu.getNumber()); } //使用Collections的sort方法对list进行排序 System.out.println("-------排序后-------"); Collections.sort(list); iterator=list.iterator(); while(iterator.hasNext()){ Studentstu=iterator.next(); System.out.println(stu.getNumber()); } } }
如上所示,可以直接使用collections的sort方法进行排序
-------排序前------- 5 2 1 4 -------排序后------- 5 4 2 1
补充知识:【JAVA】用Comparable接口学生的成绩做降序排序!请正确指定泛型;用Comparator实现按照姓名排序,请正确指定泛型!
创建四个学生信息,分别包含姓名(String),年龄(int),分数(double)
(1)用Comparable接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序,请正确指定泛型;
(2)用Comparator实现按照姓名排序,请正确指定泛型。
//定义学生类,并实现Comparable接口<定义Student类型> publicclassStudentimplementsComparable{ privateStringname; privateintage; privatedoublegrade; publicStudent(){ } publicStudent(Stringname,intage,doublegrade){ this.name=name; this.age=age; this.grade=grade; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicdoublegetGrade(){ returngrade; } publicvoidsetGrade(doublegrade){ this.grade=grade; } @Override publicStringtoString(){ return"Student[姓名:"+name+ "年龄:"+age+ "分数"+grade+"]"; } /** *用Comparable接口对下列四位同学的成绩做降序排序, *如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。请正确指定泛型 *@paramo *@return */ @Override publicintcompareTo(Studento){ if(Double.compare(this.getGrade(),o.getGrade())!=0){ if(Double.compare(this.getGrade(),o.getGrade())>0){ return1; }else{ return-1; } } returnthis.getAge()-o.getAge(); } }
*定义Student类,声明基本的属性,方法及完成对Comparable接口的实现,实现“对成绩实现降序,如果成绩一样,在成绩排序的基础上按照年龄由大到小的排序”的结果。
publicclassTask{ publicstaticvoidmain(String[]args){ //定义四个学生对象 Student[]s1=newStudent[4]; s1[0]=newStudent("liusan",20,90.0); s1[1]=newStudent("lisi",22,90.0); s1[2]=newStudent("wangwu",20,99.0); s1[3]=newStudent("sunliu",22,100.0); Arrays.sort(s1); System.out.println(Arrays.toString(s1)); System.out.println("=================="); //用Comparator实现按照姓名排序,请正确指定泛型 Arrays.sort(s1,newComparator(){ @Override publicintcompare(Studento1,Studento2){ returno1.getName().compareTo(o2.getName()); } }); System.out.println(Arrays.toString(s1)); } }
以上这篇java使用compareTo实现一个类的对象之间比较大小操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。