Comparator 和 Comparable 比较

Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。

我们不难发现:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

Comparable位于java.lang包下,comparator位于java.util包下

实现comparable接口的类,需要重写compareTo()方法

实现comparator接口的类,需要重写compare()方法

实现Comparable接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序

强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。

实现Comparable接口的使用实例

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;public class Present1 implements Comparable<Present1>{private int num;private double price;private String name;public Present1(int num,double price,String name) {// TODO Auto-generated constructor stubthis.num=num;this.price=price;this.name=name;}public static void main(String args[]){Present1 p1=new Present1(10, 20, "手表");Present1 p2=new Present1(15, 30, "裙子");Present1 p3=new Present1(12, 24, "包包");Present1 p4=new Present1(40, 40, "书");List<Present1> list=new ArrayList<Present1>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);Collections.sort(list);for(int i=0;i<list.size();i++){System.out.println(list.get(i).num);}}@Overridepublic int compareTo(Present1 o) {// TODO Auto-generated method stubreturn this.num-o.num;}
}

实现comparator接口的实例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class Present2 {public int num;public double price;public String name;public Present2(int num,double price,String name) {// TODO Auto-generated constructor stubthis.num=num;this.price=price;this.name=name;}public static void main(String args[]){Present2 p1=new Present2(10, 20, "手表");Present2 p2=new Present2(15, 15, "裙子");Present2 p3=new Present2(12, 24, "包包");Present2 p4=new Present2(40, 23, "书");List<Present2> list=new ArrayList<Present2>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);Collections.sort(list, new numComparator());for(int i=0;i<list.size();i++){System.out.println(list.get(i).num+" -"+list.get(i).name);}Collections.sort(list, new priceComparator());for(int i=0;i<list.size();i++){System.out.println(list.get(i).price+" -"+list.get(i).name);}}
}class numComparator implements Comparator<Present2>{@Overridepublic int compare(Present2 o1, Present2 o2) {// TODO Auto-generated method stubreturn o1.num-o2.num;}}class priceComparator implements Comparator<Present2>{@Overridepublic int compare(Present2 o1, Present2 o2) {// TODO Auto-generated method stubreturn new Double(o1.price).compareTo(new Double(o2.price));}}

转载于:https://www.cnblogs.com/zmhappy/p/6484789.html

Comparator 和 Comparable相关推荐

  1. java的Comparator和Comparable

    java的Comparator和Comparable 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序.      ...

  2. Java中Comparator和Comparable之间的区别

    常见的面试问题之一是"比较器和可比较器之间有什么区别". 或"您将如何通过其ID或名称对员工对象集合进行排序".为此,我们可以使用两个接口,即Comparato ...

  3. Comparator和Comparable (转)

    Comparator和Comparable比较 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 一.Compa ...

  4. Java核心技术之Comparator和Comparable在排序中的应用

    自定义的类User: package com.example.testcomparator;public class User{private String name;private int age; ...

  5. Comparator 和 Comparable的使用及区别

    这里写目录标题 Comparable的使用 Comparator比较器 Comparator和Comparable的区别 Comparable的使用 1.1.我们创建一个Student(学生)类 cl ...

  6. Comparator和Comparable的区别

    一.概述   Comparable和Comparator都是两个接口,接口都可以用来实现集合中元素的比较.排序,Comparator位于包java.util下,而Comparable位于包java.l ...

  7. Comparator和Comparable、compare的使用

    比较器排序Comparator和Comparable的使用 简述Comparable和Comparator两个接口的区别. compare是comparator里面的一个方法 Comparable:强 ...

  8. [Java开发之路](21)Comparator与Comparable

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50889774 1. Comparable p ...

  9. 判断比较器Comparator和Comparable的升序降序问题

    比较器 降序升序问题 Comparator中的compare方法 //升序排序 public int compare(int o1, int o2) {return o1 - o2; }//降序排序 ...

最新文章

  1. 深度丨MIT重磅报告:一文看清AI商业化现状与未来
  2. 智能零售来了!Amazon Go无人商店周一正式对公众开放
  3. ssm拼接html,SSM前后端分离 ssm+html+js(ajax) 这种controll层的返回值是结合或者网址...
  4. 实验13 简单FTP 程序设计
  5. UESTC_秋实大哥与快餐店 2015 UESTC Training for Data StructuresProblem C
  6. git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划
  7. bzoj 1055: [HAOI2008]玩具取名(区间DP)
  8. 小米线刷包需要解压么_小米10刷机教程,线刷升级更新官方系统包
  9. Mongo连接可视化工具Robo3T,以及Robo3T使用
  10. 富爸爸穷爸爸读书感言
  11. 金融衍生物英语名词的对应中文解析
  12. uniapp手机定位或者uniapp结合原生安卓定位
  13. 计算机usb什么意思,usb2.0是什么意思
  14. 捷径系统智慧健身房管理系统方案
  15. Polkadot的PLO第一阶段: Equilibrium在DOT上筹集了850万美元
  16. word怎么去掉页眉和页脚
  17. 【产业互联网周报】房企分拆物业公司上市潮来临,“智慧社区”加码;旷视智慧物流业务定位及战略布局;京东健康与药明康德入股卫宁科技...
  18. chrome插件-图片放大预览-imagus
  19. git runner 配置_GitLab Runner 入门及常见问题
  20. 微信小程序,后台数据返回的数据带有回车符,对文本进行回车符处理

热门文章

  1. 打包几乎各程序都需要用到的宏命令和使用名空间
  2. java basicstroke_使用java.awt.BasicStroke动画化虚线
  3. python 聚类_使用python+sklearn实现聚类性能评估中随机分配对聚类度量值的影响
  4. 13. 微型计算机中,传送cpu发出的读/写指令的总线是,我的微机原理题库
  5. presto能连接mysql和hive吗_Presto连接Hive
  6. python3程序下载安装_程序猿的语言,Python 3.7.0下载安装
  7. php 原生查询mongo,PHP操作MongoDB的原生CURD方法
  8. 浅谈Chatbot的架构模型和响应机制
  9. 看网友如何定义C++
  10. 和12岁小同志搞创客开发:手撕代码,做一款人体感应灯