对象比较器:Comparable和Comparator
在进行对象数组排序的过程中需要使用到比较器,比较器有两个:Comparable和Comparator
①、java.lang.Comparable:是在类定义是时候默认实现好的接口,里面提供有一个compareTo()方法用于大小比较
java规定:假如a和b是实现Comparable接口类创建的两个对象,
当a.compareTo(b)<0时,称a小于b;
a.compareTo(b)>0时,称a大于b;
a.compareTo(b)==0时,称a等于b。
②、java.util.Comparator:需要单独定义一个排序的比较规则类,里面有两个方法compare(),equals()
当对象刚开始时没有进行排序,但因后续要求需要进行排序时,为了不影响其他程序,可以使用此接口,新建一个专门用来对这个对象排序的类,这样对其他程序影响不大
优先使用Comparable
package com.wzy.main; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet; import org.omg.PortableInterceptor.Interceptor;
//方式1. 在此类上直接实现Comparable接口
class People implements Comparable{
People(String name,int age){
this.name = name;
this.age = age;
}
private String name;
private int age;
public int getAge() {
return age;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "name="+name+", age="+age;
}
@Override
public int compareTo(Object o) {
People p = (People)o;
return p.age-this.age;
}
}
//方式2. 使用Comparator比较器
class PersonComparator implements Comparator {
@Override
public int compare(Object one, Object another) {
return ((People)one).getAge()-((People)another).getAge();
}
}
public class Test01 {
public static void main(String[] args) {
List<People> list = new ArrayList<People>();
list.add(new People("aaa", 15));
list.add(new People("bbb", 10));
list.add(new People("ccc", 16));
list.add(new People("ddd", 13));
list.add(new People("eee", 19));
/*1 、使用Comparable,按照age来排*/
// Collections.sort(list);//1.1 传统实现方式,list的状态已经被改变为排序完的状态了
list.stream().sorted().forEach(System.out::println);//1.2 使用lambda表达式实现,没有改变list的状态
List l = Arrays.asList(list.stream().sorted().toArray());//直接把排序好的对象取出来
/*2 、使用Comparator比较器,按照age进行排序*/
// Collections.sort(list, new PersonComparator());//2.1 传统实现
// list.stream().sorted((one,another)->((People)one).getAge()-((People)another).getAge())
// .forEach(System.out::println); 2.2 lambda表达式实现
/**
* 建议使用lambda表达式,这样不会改变对象的状态
*
* */
Iterator<People> interceptor = list.iterator();
while(interceptor.hasNext()){
System.out.println(interceptor.next());
}
}
}
对象比较器:Comparable和Comparator的更多相关文章
- 比较器 comparable与comparator用法
comparable 接口 Comparable<T> 类型参数:T - 可以与此对象进行比较的那些对象的类型 public interface Comparable<T> 此 ...
- 比较器Comparable和Comparator
在java中要实现自定义类的比较,提供了以下两个接口: Comparable(内部排序) int compareTo(Object obj);返回值为int,默认升序排序 Comparator(外部排 ...
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
- 比较器comparable与comparator的使用
在Java学习和使用里,工具类与算法类(collections和Arrays)也是我们使用比较多的,在它们里面就包含了comparable与comparator这两种比较器. 一.比较器的分类与概念 ...
- Java原来如此-比较器(Comparable、Comparator)
有时候需要对Collection或者不为单一数字的Array进行比较,有两种方法,1是实现Comparable接口,2是实现Comparator接口. 1.ComParable接口 Comparabl ...
- 小白养成记——Java比较器Comparable和Comparator
一.使用情景 1. 调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- java对象比较器和克隆
一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要 ...
- comparable和comparator
Comparable Comparable可以认为是一个内部比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,在compareTo方法中指定具体的比较方法. comp ...
随机推荐
- ios 学习笔记之控件属性
1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible; 默认是不带清除属性:Never app ...
- MyEclipse10查看Struts2源码及Javadoc文档
1:查看Struts2源码 (1):Referenced Libraries >struts2-core-2.1.6.jar>右击>properties. (2):Java Sour ...
- [翻译]用 Puppet 搭建易管理的服务器基础架构(4)
我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第四部分. 原文地址:http://blog.jobbole.com/89214/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...
- 转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解
目标大纲 文章转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解 IE中CSS-filter滤镜小知识大全 CSS实现跨浏览器兼容性的盒阴影效果
- window下 Sublime Text 3 安装
1.下载 官网 http://www.sublimetext.com/ 安装时,注意勾选Add to explorer context menu,这样Sublime Text可以被添加到右键中,在右键 ...
- iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示. 并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效. 出现以下情况: Failed to locate or generat ...
- 基本排序算法——基数排序java实现
基数排序 package basic.sort; import java.util.Arrays; import java.util.Random; public class RadixSort { ...
- Aspose.Words基本操作
一个非常好用的控件. 基本的操作可以参考伍大神的文章: http://www.cnblogs.com/wuhuacong/archive/2012/08/30/2662961.html 在这里补充四点 ...
- Linux安全基础:配置network
在 Linux 系统中,TCP/IP 网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作.系统中重要的有关网络配置文件有以下几项: /etc/sysconfig/network/etc ...
- GPU大百科全书索引(有助于理解openGL工作流程)
GPU大百科全书索引 0.GPU大百科全书 前传 看图形与装修的关系 1.GPU大百科全书 第一章:美女 方程与几何 2.GPU大百科全书 第二章 凝固生命的光栅化 3.GPU大百科全书 第三章:像素 ...