Comparator 和 Comparable
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相关推荐
- java的Comparator和Comparable
java的Comparator和Comparable 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. ...
- Java中Comparator和Comparable之间的区别
常见的面试问题之一是"比较器和可比较器之间有什么区别". 或"您将如何通过其ID或名称对员工对象集合进行排序".为此,我们可以使用两个接口,即Comparato ...
- Comparator和Comparable (转)
Comparator和Comparable比较 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 一.Compa ...
- Java核心技术之Comparator和Comparable在排序中的应用
自定义的类User: package com.example.testcomparator;public class User{private String name;private int age; ...
- Comparator 和 Comparable的使用及区别
这里写目录标题 Comparable的使用 Comparator比较器 Comparator和Comparable的区别 Comparable的使用 1.1.我们创建一个Student(学生)类 cl ...
- Comparator和Comparable的区别
一.概述 Comparable和Comparator都是两个接口,接口都可以用来实现集合中元素的比较.排序,Comparator位于包java.util下,而Comparable位于包java.l ...
- Comparator和Comparable、compare的使用
比较器排序Comparator和Comparable的使用 简述Comparable和Comparator两个接口的区别. compare是comparator里面的一个方法 Comparable:强 ...
- [Java开发之路](21)Comparator与Comparable
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50889774 1. Comparable p ...
- 判断比较器Comparator和Comparable的升序降序问题
比较器 降序升序问题 Comparator中的compare方法 //升序排序 public int compare(int o1, int o2) {return o1 - o2; }//降序排序 ...
最新文章
- 深度丨MIT重磅报告:一文看清AI商业化现状与未来
- 智能零售来了!Amazon Go无人商店周一正式对公众开放
- ssm拼接html,SSM前后端分离 ssm+html+js(ajax) 这种controll层的返回值是结合或者网址...
- 实验13 简单FTP 程序设计
- UESTC_秋实大哥与快餐店 2015 UESTC Training for Data StructuresProblem C
- git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划
- bzoj 1055: [HAOI2008]玩具取名(区间DP)
- 小米线刷包需要解压么_小米10刷机教程,线刷升级更新官方系统包
- Mongo连接可视化工具Robo3T,以及Robo3T使用
- 富爸爸穷爸爸读书感言
- 金融衍生物英语名词的对应中文解析
- uniapp手机定位或者uniapp结合原生安卓定位
- 计算机usb什么意思,usb2.0是什么意思
- 捷径系统智慧健身房管理系统方案
- Polkadot的PLO第一阶段: Equilibrium在DOT上筹集了850万美元
- word怎么去掉页眉和页脚
- 【产业互联网周报】房企分拆物业公司上市潮来临,“智慧社区”加码;旷视智慧物流业务定位及战略布局;京东健康与药明康德入股卫宁科技...
- chrome插件-图片放大预览-imagus
- git runner 配置_GitLab Runner 入门及常见问题
- 微信小程序,后台数据返回的数据带有回车符,对文本进行回车符处理
热门文章
- 打包几乎各程序都需要用到的宏命令和使用名空间
- java basicstroke_使用java.awt.BasicStroke动画化虚线
- python 聚类_使用python+sklearn实现聚类性能评估中随机分配对聚类度量值的影响
- 13. 微型计算机中,传送cpu发出的读/写指令的总线是,我的微机原理题库
- presto能连接mysql和hive吗_Presto连接Hive
- python3程序下载安装_程序猿的语言,Python 3.7.0下载安装
- php 原生查询mongo,PHP操作MongoDB的原生CURD方法
- 浅谈Chatbot的架构模型和响应机制
- 看网友如何定义C++
- 和12岁小同志搞创客开发:手撕代码,做一款人体感应灯