Comparator与Comparable接口实现对象排序
2016-01-25 14:02
369 查看
Arrays.sort方法可以实现对基本类型的元素进行排序,但对于非基本类型,Java中常通过重载compareTo方法自定义排序方式
Comparable & Comparator 接口都可用来实现集合元素的比较、排序,其中Comparable通过集合内部定义的方法实现排序,Comparator 通过外部自定义比较器实现排序。排序时,可采用实现集合内部Comparable接口和自定义外部比较器两种方式。
案例描述:
输入若干个学生信息,每个学生具有姓名(stuName),学号(stuId),成绩(score)等属性,输入后按成绩降序排列,若成绩相同,按学号升序排列
测试代码:
一 实现Comparable接口
测试结果1:
二 自定义比较器,实现Comparator接口
测试结果2:
Comparable & Comparator 接口都可用来实现集合元素的比较、排序,其中Comparable通过集合内部定义的方法实现排序,Comparator 通过外部自定义比较器实现排序。排序时,可采用实现集合内部Comparable接口和自定义外部比较器两种方式。
案例描述:
输入若干个学生信息,每个学生具有姓名(stuName),学号(stuId),成绩(score)等属性,输入后按成绩降序排列,若成绩相同,按学号升序排列
测试代码:
package edu.fjnu.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Tester { public static void main(String[] args) { // TODO Auto-generated method stub List<Student> stuList = new ArrayList<Student>(); int stuNumber;// 学生数 Scanner cin = new Scanner(System.in); stuNumber = cin.nextInt();// 输入学生人数 for (int i = 1; i <= stuNumber; i++) {// 录入学生信息 Student stu = new Student(); int score, num; String name = null; num = cin.nextInt();// 学号 score = cin.nextInt();// 分数 name = cin.nextLine();// 姓名 stu.setStuId(num); stu.setScore(score); stu.setStuName(name); stuList.add(stu);// 加入stuList } Collections.sort(stuList, new StudentComparator());// 一 实现Comparable接口 Collections.sort(stuList);// 自定义比较器,实现Comparator接口 for (Student stu : stuList) System.out.println(stu); } }
一 实现Comparable接口
package edu.fjnu.test; import java.util.Comparator; public class StudentComparator implements Comparator { @Override public int compare(Object o1, Object o2) {//自定义集合元素比较方式 // TODO Auto-generated method stub Student s1 = (Student) o1; Student s2 = (Student) o2; if (s1.getScore() < s2.getScore())// 先按分数降序排序 return 1; else if (s1.getScore() == s2.getScore()) return s1.getStuId().compareTo(s2.getStuId());// 分数相同按学号升序排序 return -1; } }
测试结果1:
二 自定义比较器,实现Comparator接口
package edu.fjnu.test; import java.util.Comparator; public class Student implements Comparable { Integer stuId;// 学号 String stuName;// 姓名 Integer score;// 分数 public Integer getStuId() { return stuId; } public void setStuId(Integer stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } @Override public String toString() { return "学号:" + stuId + "\t姓名:" + stuName + "\t分数:" + score; } @Override public int compareTo(Object o) { Student s = (Student) o; if (this.getScore() < s.getScore())// 先按分数降序排列 return 1; else if (this.getScore() == s.getScore())// 分数相同则按学号升序排列 return this.getStuId() - s.getStuId(); return -1; } }
测试结果2:
相关文章推荐
- .profile设置环境变量相关
- [iOS基础控件-6.11.2]-UINavigationController多控制器简单
- Windows下使用Word2vec继续词向量训练
- 学车笔记 -- 侧方位(一字型)停车
- http长轮询&短轮询
- 18个开源的Java CMS
- android自定义checkBox样式
- DJANGO和UIKIT结合,作一个有进度条的无刷新上传功能
- hibernate(三)检索属性配置
- Android中log4j的运用
- SpringMVC图片上传与访问
- uinavigationcontroller 中的viewcontrollers 跳到指定的controller一个栈顶指针的变化
- android 全透明状态栏
- Volley框架的简单使用
- 测试中的用词积累
- leetcode----Reverse Integer
- DB2 Runstats 抽样统计 sampled
- Android Studio 打包apk,自动追加版本号和版本名称
- C语言之字符串处理函数
- 国庆遐想:漫步云计算数据中心