Java的Comparator和Comparable对比
来源:互联网 发布:mac 越狱工具 编辑:程序博客网 时间:2024/04/29 12:15
1.对象如何对比排序?
Java的基本类型如int, float, double都可以直接使用java.util.Arrays.sort(Object[])对比排序,那对象是如何比较排序的呢?我们定义的类都是继承Object类的,Object类的equals的方法,默认是比较两个对象是否相等(hashcode相同)
public boolean equals(Object obj) { return (this == obj); }而我们现实要求一般不是这样比较,可以通过实现Comparable或Comparator接口来重新定义对象的排序。
2.Comparable
java.lang.Comparable: int compareTo(Object o1)
这个方法用于当前对象与o1对象做对比,返回int值,分别的意思是:
- positive – 当前对象大于o1
- zero – 当前对象等于o1
- negative – 当前对象小于o1
import java.util.*;class ComparableDemo{public static void main(String[] args) {Student[] stu={new Student(18,"Mark"),new Student(22,"John"),new Student(20,"Tom"),new Student(19,"Jim")};Arrays.sort(stu);for(Student s:stu){System.out.println("the age:"+s.age+",the name:"+s.name);}}}class Student implements Comparable{public int age;public String name;Student(int age,String name){this.age=age;this.name=name;}public int compareTo(Object s){ return this.age-((Student)s).age;}}
3.Comparator
java.util.Comparator: int compare(Object o1, Objecto2)
这个方法用于o1与o2对象做对比,返回int值,分别的意思是:
- positive – o1大于o2
- zero – o1等于o2
- negative – o1小于o2
import java.util.*;class ComparatorDemo{public static void main(String[] args) {Student[] stu={new Student(18,"Mark"),new Student(22,"John"),new Student(20,"Tom"),new Student(19,"Jim")};/*//也可以直接将比较器以内部类形式定义Comparator<Student> comp=new Comparator<Student>{public int compare(Student s1,Student s2){return s1.age-s2.age;}};Arrays.sort(stu,comp);*/Arrays.sort(stu,new StuComparator());for(Student s:stu){System.out.println("the age:"+s.age+",the name:"+s.name);}}}class Student{public int age;public String name;Student(int age,String name){this.age=age;this.name=name;}}class StuComparator implements Comparator<Student>{public int compare(Student s1,Student s2){return s1.age-s2.age;}}
4.两种方式区别:
一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、定义类时若没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等(比较灵活)
即:
Comparable对应使用的是:java.util.Collections.sort(List) 或 java.util.Arrays.sort(Object[])
Comparator对应使用的是:java.util.Collections.sort(List, Comparator) 或 java.util.Arrays.sort(Object[], Comparator)
---EOF---
- Java的Comparator和Comparable对比
- java的Comparator和Comparable
- java的Comparator和Comparable
- java的Comparator和Comparable
- java的Comparator和Comparable
- java的Comparator和Comparable
- Java 的Comparable 和 Comparator
- java Comparable和Comparator
- JAVA Comparator 和 Comparable
- java comparator和comparable
- Java Comparable 和 Comparator
- 【Java语言学习】之Comparator 和 Comparable 对比
- java中comparable和 comparator的区别
- java的Comparable 和Comparator 接口
- java Comparable 和 Comparator 的 Collections 排序
- java中Comparator 和 Comparable 的区别
- Java的Comparator和Comparable接口
- java基础--Comparable和Comparator的区别
- C语言中continue和break的用法
- 归并排序
- 【牛腩新闻发布系统】——总结
- Python中threading的join和setDaemon的区别及用法[例子]
- java线程
- Java的Comparator和Comparable对比
- SQL Server:查看数据库用户权限(SQL 2008)
- SQL SERVER 查看用户权限
- Java学习笔记(一)
- 从数据看世界:金三胖和三胖的朝鲜
- H3C WA1208E-GP-H20 瘦AP刷胖AP过程详解
- 我们的手游服务器3个月内宕机1次
- ORACLE PL/SQL编程之八: 把触发器说透
- Effective C++-读书笔记