Comparable接口与Comparator接口主要区别及实例
来源:互联网 发布:如何检查windows更新 编辑:程序博客网 时间:2024/05/22 00:40
Comparable接口与Comparator接口主要区别:
1、前者(强烈推荐)是强行对是实现它的每个类的对象进行整体排序,此类被称为该类的自然排序,类的compareTo方法被称为它的自然比较方法,实现此接口的对象列表和(数组)可以通过Collections.sort()或者Arrays.sort()进行自动排序。
2、Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
3、实现方法int compareTo(T o) 比较对象之间的关系,< >=分别返回负数,正数,零。
4、强烈推荐(x.compareTo(y)==0)==(x.equals(y))这种做法,但不是严格要求这么做。
实例:
Comparable接口
Person.java
packagecom.comparable.test;
importjava.util.Random;
public class Person implements Comparable<Person> {
private Randomr = new Random();
private Stringusername;
private int age;
private int id= r.nextInt(100);
publicString getUsername() {
returnusername;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
returnage;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
returnid;
}
public void setId(int id) {
this.id = id;
}
public String toString() {
return"Person [username=" + username + ",age=" + age
+ ", id=" + id + "]";
}
public Person(String username,int age) {
super();
this.username = username;
this.age = age;
}
//override compareTo method
public int compareTo(Person o) {
if(this.id>o.id){
return 1;
}elseif(this.id==o.id){
return 0;
}else{
return -1;
}
/* if(this.age>o.getAge()){
return 1;
}elseif(this.age==o.getAge()){
return 0;
}else{
return -1;
}*/
}
}
Comparator接口
ComparableTest.java
packagecom.comparable.test;
importjava.util.Arrays;
public class ComparableTest{
public static void main(String[] args) {
Person[] persons =new Person[3];
persons[0] =newPerson("zhangsan",10);
persons[1]= newPerson("lisi",21);
persons[2] = newPerson("wangwu",22);
Arrays.sort(persons);
for(Person p:persons){
System.out.println("-----------------");
System.out.print(p.toString());
System.out.println("-----------------");
}
}
}
ComparatorTest.java
packagecom.comparator.test;
import java.util.ArrayList;
importjava.util.Comparator;
import java.util.List;
importjava.util.Set;
importjava.util.TreeSet;
importcom.comparable.test.Person;
public class ComparatorTest implements Comparator<Person> {
public static void main(String[] args) {
ComparatorTest comparator = new ComparatorTest();
Set<Person> ps = new TreeSet<Person>(comparator);
ps.add(new Person("zhangsan",21));
ps.add(new Person("jack",19));
ps.add(new Person("sun",20));
for(Person p:ps){
System.out.println("-----------------");
System.out.print(p.toString());
System.out.println("-----------------");
}
}
public int compare(Person o1, Person o2) {
if(o1.getAge()>o2.getAge()){
return 1;
}elseif(o1.getAge()==o2.getAge()){
return 0;
}else{
return -1;
}
}
}
- Comparable接口与Comparator接口主要区别及实例
- Comparable接口与Comparator接口区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- 两圆相交面积
- Android XML文件使用
- [Leetcode] Construct Binary Tree from Inorder and Postorder/Preorder and Inorder Traversal
- sap 系统之间读取数据- rfc_read_table
- iOS 之init、loadView、viewDidLoad、viewDidUnload、dealloc
- Comparable接口与Comparator接口主要区别及实例
- C语言定义常量
- ping命令执行过程详解
- android Fragments详解四:管理fragment
- you must restart adb and eclipse的相关解决办法
- TinyOS nesC myep3 - upgrade
- Java正则表达式替换空格和换行符
- iOS 之NSThread
- hadoop作业引用第三方jar文件