博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的Comparable<T>和Comparator<T>接口
阅读量:5249 次
发布时间:2019-06-14

本文共 3621 字,大约阅读时间需要 12 分钟。

有的时候在面试时会被问到Comparable<T>和Comparator<T>的区别(或者Java中两种排序功能的实现区别)。

 

1) 在使用普通数组的时候,如果想对数据进行排序,可以调用java.util.Arrays.sort()。但要通过该方式对数组进行排序,还需要数组中的对象实现Comparable<T>接口。

package org.lyk.entities;public class Book implements Comparable
{ private String name; private double price; public Book(String name,double price) { super(); this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Book [name=" + name + ", price=" + price + "]"; } @Override public int compareTo(Book o) { if(this.price < o.price) return -1; else if(this.price > o.price) return 1; else return 0; } }

测试代码:

package org.lyk.main;import org.lyk.entities.*;import org.lyk.interfaces.*;  import java.math.*; import java.sql.*;import java.text.*; import java.util.*;  public class Main{    public static void main(String[] args)     {        Book[] books = new Book[]        {            new Book("Java编程思想", 73.8),            new Book("Java从入门到精通", 40.7),            new Book("疯狂Java讲义(第3版 附光盘)", 91.3),            new Book("O'Reilly:Head First Java", 47.3),            new Book("Java Web整合开发王者归来", 78.8)        };                Arrays.sort(books);                for(Book item : books)        {            System.out.println(item);        }    } }

2)现在如果一个类已经开发完成,或者这个类由第三方提供,在这个类中没有实现Comparable<T>接口。此时我们已经不能修改Book类,那么要实现Book数组的排序,就必须借助另外一个Comparator<T>接口。

package org.lyk.entities;public class Book {    private String name;    private double price;        public Book(String name,double price)    {        super();        this.name = name;        this.price = price;    }        public String getName()    {        return name;    }    public void setName(String name)    {        this.name = name;    }    public double getPrice()    {        return price;    }    public void setPrice(double price)    {        this.price = price;    }    @Override    public String toString()    {        return "Book [name=" + name + ", price=" + price + "]";    }}

实现Comparator<T>的BookComparator类。

package org.lyk.entities;import java.util.Comparator;public class BookComparator implements Comparator
{ @Override public int compare(Book o1, Book o2) { if(o1.getPrice() < o2.getPrice()) return -1; else if(o1.getPrice() > o2.getPrice()) return 1; else return 0; } }

测试代码:

package org.lyk.main;import org.lyk.entities.*;import org.lyk.interfaces.*;  import java.math.*; import java.sql.*;import java.text.*; import java.util.*;  public class Main{    public static void main(String[] args)     {        Book[] books = new Book[]        {            new Book("Java编程思想", 73.8),            new Book("Java从入门到精通", 40.7),            new Book("疯狂Java讲义(第3版 附光盘)", 91.3),            new Book("O'Reilly:Head First Java", 47.3),            new Book("Java Web整合开发王者归来", 78.8)        };                Arrays.sort(books,new BookComparator());                for(Book item : books)        {            System.out.println(item);        }    } }

 

小结:

  一个类实现Comparable<T>接口,那么这个类本身就具有了被排序的功能。

  一个类如果没有实现Comparable<T>接口,要使该类在数组中能排序,就要另外再写一个针对该类的排序类,新写的类必须实现Comparator<T>功能。

也就是说,一个是自己有比较功能,另一个是让第三方类实现比较功能。

转载于:https://www.cnblogs.com/kuillldan/p/5898618.html

你可能感兴趣的文章
android SQLite
查看>>
Excel导出
查看>>
sql点滴40—mysql乱码问题总结
查看>>
华为项目管理法读后小结
查看>>
ceshichajian
查看>>
roborframework操作selenium--mac环境
查看>>
[HAOI2006]旅行 题解(kruskal)
查看>>
python自动化之(自动生成测试报告)
查看>>
xcode SVN
查看>>
ios 推送
查看>>
纸张尺寸
查看>>
IIS7中多个版本php共存的方法
查看>>
V3学院教你使用(* KEEP="TRUE" *)
查看>>
Spring MVC使用过程注意事项
查看>>
Java基本语法
查看>>
windows下C#通过Thrift操作HBase
查看>>
分页导航 简洁版 只有上一页下一页
查看>>
sql 获取当天开始时间 结束时间
查看>>
51nod 1564 区间的价值 | 分治 尺取法
查看>>
设置ubuntu Android sdk环境变量
查看>>