comparable 和 Comparator 的区别

comparable 接⼝实际上是出⾃java.lang 包 它有⼀个 compareTo(Object obj) ⽅法⽤来排序comparator 接⼝实际上是出⾃ java.util 包它有⼀个compare(Object obj1, Objectobj2) ⽅法⽤来排序。

⼀般我们需要对⼀个集合使⽤⾃定义排序时,我们就要重写compareTo() ⽅法或compare() ⽅法,
当我们需要对某⼀个集合实现两种排序⽅式,⽐如⼀个 学生对象A中的成绩a要按照大小排序的话,我们可以重写compareTo() ⽅法和使⽤⾃制的Comparator ⽅法或者以两个 Comparator来实现歌名排序和歌星名排序,第⼆种代表我们只能使⽤两个参数版Collections.sort() .

compareTo

compareTo是Comparable接口的方法

public interface Comparable<T> {public int compareTo(T o);
}

compareTo方法用于比较两个对象的大小,一般写法

    @Overridepublic int compareTo(A o) {if (o.a==this.a) {return 0;}else {return o.a>a?-1:1;}}

用途1:比较

如a.compareTO(b),a小于b返回-1,等于返回0,大于返回1。

用途2:排序

public class A implements Comparable<A>{int a ;public A(int a  ){this.a= a;}@Overridepublic int compareTo(A o) {if (o.a==this.a) {return 0;}else {return o.a>a?-1:1;}}@Overridepublic String toString() {return "A{" +"a=" + a +'}';}public static void main(String[] args) {LinkedList<A> as = new LinkedList<>();as.add( new A(2546));as.add( new A(8762));as.add( new A(2324));as.add( new A(3242));as.add( new A(3242));as.add( new A(322));as.add( new A(4322));as.add( new A(6782));System.out.println("排序前:");as.forEach(System.out::println);Collections.sort(as);System.out.println("排序后:");as.forEach(System.out::println);}
}
排序前:
A{a=2546}
A{a=8762}
A{a=2324}
A{a=3242}
A{a=3242}
A{a=322}
A{a=4322}
A{a=6782}
排序后:
A{a=322}
A{a=2324}
A{a=2546}
A{a=3242}
A{a=3242}
A{a=4322}
A{a=6782}
A{a=8762}Process finished with exit code 0

compare

compare是Comparator的接口

public interface Comparator<T> {int compare(T o1, T o2);
}

compare是Comparator的方法,用于集合的排序,但是用的时候需要实现compare方法

下面这种写法是lambda表达式方法,还可以用一个类实现接口的方法来实现

public class B{int a;public B(int a){this.a = a;}@Overridepublic String toString() {return "B{" +"a=" + a +'}';}public static void main(String[] args) {LinkedList<B> bs = new LinkedList<>();bs.add( new B(3333));bs.add( new B(2222));bs.add( new B(1111));bs.add( new B(4444));System.out.println("排序前:");bs.sort((s1, s2) -> s1.a > s2.a ? 1 :-1 );System.out.println("排序后:");bs.forEach(System.out::println);}
}
排序前:
B{a=3333}
B{a=2222}
B{a=1111}
B{a=4444}
排序后:
B{a=1111}
B{a=2222}
B{a=3333}
B{a=4444}Process finished with exit code 0

Java集合框架:List排序,compareTo,compare使用相关推荐

  1. java arraylist排序_一文读懂Java集合框架

    欢迎关注微信公众号:深入浅出Java源码 概念 Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们.集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表, ...

  2. Java集合框架综述,这篇让你吃透!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...

  3. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  4. java集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  5. Java集合框架(1)

    Collection接口:它是Java集合框架的一个根接口,也是List.Set和Queue接口的父接口.同时它定义了可用于操作List.Set和Queue的方法-增删改查.Map接口:它提供了一种映 ...

  6. java集合框架图(一)

    一.集合类简介 Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中.从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数 ...

  7. 容器(一)剖析面试最常见问题之 Java 集合框架

    转载自https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/Java%E9%9B%86%E5%90%88%E ...

  8. java list有序还是无序_牛批!2w字的Java集合框架面试题精华集(2020最新版),赶紧收藏。...

    一个多月前,作者和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点.每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标 ...

  9. 厉害!Java集合框架综述,这篇让你吃透!

    作者:平凡希 来源:cnblogs.com/xiaoxi/p/6089984.html 一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Ja ...

  10. Java 集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

最新文章

  1. Xamarin Essentials教程语音播报TextToSpeech
  2. 【论文阅读】Illuminating Pedestrians via Simultaneous Detection Segmentation
  3. Cloud Foundry Java客户端–流事件
  4. Python性能测试方法
  5. 30.构建单机多容器环境-故障31.构建单机多容器环境
  6. python简明教程_01
  7. Eric,基于多搜索引擎的自动问答机器人
  8. 用javascript实现一个打乱文字小程序
  9. 逻辑究竟是什么以及逻辑应当是什么?
  10. 大论文 自动生成标题目录、图目录和表目录
  11. IllegalStateException: Couldn‘t read row 0, col 10 from CursorWindow. Make sure the Cursor is initi
  12. 顺利通过了CCIE的考试
  13. 英语watch手表源自wacche
  14. 资讯|MIUI11正式版推送12款小米手机
  15. python+javascript+baiduMapAPI实现地图批量标注地点
  16. SM59 RFC 目标 SAP_PROXY_ESR 设置到服务资源库连接的检查列表
  17. 用ChatGPT搜索论文教程
  18. Open3D法线双边滤波, 利用法向信息提高点云滤波效果
  19. quartz 每30秒执行一次_作业调度框架 Quartz 学习笔记(三) -- Cron表达式
  20. java 读取文件的指定行_Java中实现读取文件指定行

热门文章

  1. 用机器人造个性化癌症疫苗的公司会靠谱吗?
  2. 复选框(checkbox)、多选框
  3. 计算机基础知识 新浪博客,计算机基础知识(1)
  4. Python爬取4K超清唯美桌面壁纸
  5. 蚂蚁区块链李杰力:开放联盟链2020年支持数字积分
  6. 重磅:2022年国家社科基金立项名单公示!| 附完整名单
  7. GPT4All开源的聊天机器人
  8. 明天又上班了,真好~
  9. Tableau数据处理、折线图与饼图
  10. mysql全库搜索关键字_MS SQL SERVER 全库搜索