Comparable与Comparator的区别
2015-12-14 23:02
225 查看
当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,可用以下两种方法进行自定义排序. 两者的共同点都是 返回正数 前者大 负数 后者大 0相等 ![文件的目录结构](http://img.blog.csdn.net/20151214225711581)
继承Comparable接口
package com.train.blog; public class Student implements Comparable<Student> { private int id; private int age; private String name; Student(int id, int age, String name) { this.id = id; this.age = age; this.name = name; } public int getId() { return id; } public int getAge() { return age; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } @Override public int compareTo(Student s) { // TODO Auto-generated method stub return this.age - s.age; } }
继承Comparable接口 进行测试
public void TestComparable(){ List<Student> list=new ArrayList<Student>(); Student student1=new Student(1,10,"名字1"); Student student2=new Student(1,4,"名字2"); Student student3=new Student(1,2,"名字3"); Student student4=new Student(1,20,"名字4"); Student student5=new Student(1,15,"名字5"); list.add(student1); list.add(student2); list.add(student3); list.add(student4); list.add(student5); Collections.sort(list); for (Student student : list) { System.out.println("student的年龄:"+student.getAge()+" 学生的姓名:"+student.getName()); } }
继承Comparator
package com.train.blog; public class Teacher { private int id; private int age; private String name; Teacher(int id, int age, String name) { this.id = id; this.age = age; this.name = name; } public int getId() { return id; } public int getAge() { return age; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } }
package com.train.blog; import java.util.Comparator; public class TeacherComparator implements Comparator<Teacher> { @Override public int compare(Teacher o1, Teacher o2) { // TODO Auto-generated method stub return (o1.getAge()-o2.getAge()); } }
继承Comparator接口 进行测试
public void TestComparator(){ List<Teacher> list=new ArrayList<Teacher>(); Teacher teacher1=new Teacher(1,10,"名字1"); Teacher teacher2=new Teacher(1,4,"名字2"); Teacher teacher3=new Teacher(1,2,"名字3"); Teacher teacher4=new Teacher(1,20,"名字4"); Teacher teacher5=new Teacher(1,15,"名字5"); list.add(teacher1); list.add(teacher2); list.add(teacher3); list.add(teacher4); list.add(teacher5); Collections.sort(list,new TeacherComparator()); for (Teacher teacher : list) { System.out.println("teacher的年龄:"+teacher.getAge()+" teacher的姓名:"+teacher.getName()); } }
总结
【1】继承Comparable 覆写compareTo 方法; 继承Comparator覆写compare 方法;【2】Comparable 表明对象之间可以比较,Comparator可以看成一种算法的实现,将算法和数据分离
【3】Comparator使用环境
(1)类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
(2)可以使用多种排序标准,比如升序、降序等
相关文章推荐
- android存储/数据操作
- Windows Server 2008 R2 FTP的防火墙设置
- [Oracle] sqlplus / as sysdba ora-01031 insufficient privileges
- 朝花夕拾——Java的synthetic修饰词
- makefile 的使用
- NSURLSession基础
- iOS开发UI篇—核心动画(基础动画)
- 数学魔术
- CSS3阴影 box-shadow的使用和技巧总结
- 使用C#连接ORACLE数据库
- 给jdk写注释系列之jdk1.6容器(2)-LinkedList源码解析
- Session 与 Cookie
- Hbase存储详解
- iOS平台下的内存管理和一些内存检测的实用方法
- 海量数据处理
- AdapterView及子类的相关学习整理
- Android笔记:ListView 显示(数据变化后滚动到)最底部。
- vim配置
- AngularJS 指令
- 第三阶段第一天