集合排序 Comparator和Comparable的使用区别
在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的方法有: Comparator
和Comparable
Comparator接口
使用步骤:
- 新建比较类,
- 实现Comparator接口,
- 重写compare方法,
- package sort;
- import java.util.Comparator;
- public class LuckBoyCompare implements Comparator<LuckBoy>{
- @Override
- public int compare(LuckBoy o1, LuckBoy o2) {
- return o1.getAge()-o2.getAge();
- }
- }
- 调用
Collections.sort()
方法进行排序, - 形式:
Collections.sort(集合, 比较器实例)
.
- @Test
- public void test1() {
- List<LuckBoy> boyList = new ArrayList<LuckBoy>();
- LuckBoy boy1 = new LuckBoy("张三",13,"上海");
- LuckBoy boy2 = new LuckBoy("李四",12,"北京");
- LuckBoy boy3 = new LuckBoy("王五",18,"深圳");
- LuckBoy boy4 = new LuckBoy("马六",17,"南京");
- boyList.add(boy1);
- boyList.add(boy2);
- boyList.add(boy3);
- boyList.add(boy4);
- System.out.println("排序前:");
- for (LuckBoy luckBoy : boyList) {
- System.out.println(luckBoy);
- }
- System.out.println("排序后:");
- Collections.sort(boyList, new LuckBoyCompare());
- for (LuckBoy luckBoy : boyList) {
- System.out.println(luckBoy);
- }
- }
LuckBoy.java
- package sort;
- public class LuckBoy{
- private String name;
- private Integer age;
- private String city;
- public LuckBoy() {
- super();
- }
- public LuckBoy(String name, Integer age, String city) {
- super();
- this.name = name;
- this.age = age;
- this.city = city;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- @Override
- public String toString() {
- return "LuckBoy [name=" + name + ", age=" + age + ", city=" + city + "]";
- }
- }
打印结果:
排序前:
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=王五, age=18, city=深圳]
LuckBoy [name=马六, age=17, city=南京]
排序后:
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=马六, age=17, city=南京]
LuckBoy [name=王五, age=18, city=深圳]
Comparable接口
使用步骤:
- 数据模型实现Comparable接口,
- 重写compareTo方法,
- package sort;
- public class LuckBoy implements Comparable<LuckBoy>{
- //TODO 中间代码省略
- @Override
- public int compareTo(LuckBoy o) {
- return this.age-o.age;
- }
- }
- 调用
Collections.sort()
方法进行排序, - 形式:
Collections.sort(集合)
- @Test
- public void test2() {
- List<LuckBoy> boyList = new ArrayList<LuckBoy>();
- LuckBoy boy1 = new LuckBoy("张三",13,"上海");
- LuckBoy boy2 = new LuckBoy("李四",12,"北京");
- LuckBoy boy3 = new LuckBoy("王五",18,"深圳");
- LuckBoy boy4 = new LuckBoy("马六",17,"南京");
- boyList.add(boy1);
- boyList.add(boy2);
- boyList.add(boy3);
- boyList.add(boy4);
- System.out.println("============================");
- System.out.println("排序前:");
- for (LuckBoy luckBoy : boyList) {
- System.out.println(luckBoy);
- }
- System.out.println("排序后:");
- Collections.sort(boyList);
- for (LuckBoy luckBoy : boyList) {
- System.out.println(luckBoy);
- }
- }
打印结果:
排序前:
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=王五, age=18, city=深圳]
LuckBoy [name=马六, age=17, city=南京]
排序后:
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=马六, age=17, city=南京]
LuckBoy [name=王五, age=18, city=深圳]
区别
Comparator 使用灵活,不需要修改源码.但是,使用时需要传入比较器对象;
Comparable 使用简单,但是需要修改源码.
集合排序 Comparator和Comparable的使用区别的更多相关文章
- Comparator与Comparable用法与区别
一.概述. Comparator和Comparable两者都属于集合框架的一部分,都是用来在对象之间进行比较的,但两者又有些许的不同,我们先通过一个例子来看一下他们的区别,然后再分别学习下它们的源 ...
- Java集合中Comparator和Comparable接口的使用
在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...
- Java自学-集合框架 Comparator和Comparable
Java Comparator和Comparable 步骤 1 : Comparator 假设Hero有三个属性 name,hp,damage 一个集合中放存放10个Hero,通过Collection ...
- 集合排序Comparable和Comparator有什么区别?
Comparable和Comparator兄弟俩长得是真像.但是,需要注意下,使用中它们还是有不少区别的.下面,就一探究竟吧. 一.Comparator 做过集合排序的童鞋应该知道,可以使用Colle ...
- Java集合排序方法comparable和comparator的总结
一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...
- Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...
- Java学习笔记--集合元素的比较Comparable,Comparator
原文见: http://www.cnblogs.com/sunflower627/p/3158042.html 1. Comparator 和 Comparable 相同的地方 他们都是java的一个 ...
- 接口Comparator和Comparable的区别和联系
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的. 什么是自定义class: 如 public class Pe ...
- comparator接口与Comparable接口的区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...
随机推荐
- opencv: 排序
opencv提供了排序函数: sort和sorIdx , 其中sortIdx可以获取排序后的序号,比较方便: sortIdx原型: C++: void sortIdx(InputArray src, ...
- C++学习之回调函数
回调函数: 通过函数指针进行调用的函数. 回调函数不是由实现方进行调用,而是将函数指针传入,在特殊条件或者状态下进行触发调用. 譬如: 在自定义按钮控件时,当点击按钮,触发点击事件,调用指定函数. 注 ...
- windows下配置host不生效问题
今天遇到了host配置之后不生效的问题,原因是文本编辑器用的是非windows格式,再notepad++右下角切换一下即可,将notepad++ 视图-显示符号-显示所有字符勾上之后可以看到windo ...
- java-map复合类型(HashMap-TreeMap)常用操作例子(适合初学者)
package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.HashMap; import java.u ...
- linux部署Web项目总结
本文用的是CentOS7系统,不是虚拟机. 1.什么是Xshell? xshell连接上linux之后,就等同于linux本身的终端命令窗口. xshell不是必需品,但是它能更好的辅助我们学习lin ...
- 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)
题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ...
- HDU 1024(新最大子序列和 DP)
题意是要在一段数列中求 m 段互不重合的子数列的最大和. 动态规划,用数组 num[ ] 存储所给数列,建二维数组 dp[ ][ ] , dp[ i ][ j ] 表示当选择了第 j 个数字( num ...
- MySQL学习笔记(三)数据优化
第1章 数据库优化简介1-1 MySQL优化简介 第2章 SQL语句优化2-1 数据准备 2-2 MySQL慢查日志的开启方式 2-3 MySQL慢查日志分析工具之 mysqldumpslow www ...
- Golang入门教程(十三)延迟函数defer详解
前言 大家都知道go语言的defer功能很强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.Go 语言中延迟函数 defer 充当着 try...catch 的重任,使用起来也非常简便,然而在 ...
- Oracle和Mysql的安装
Oracle12C的安装:https://blog.csdn.net/qubeleyz/article/details/79451192 Mysql安装: