java中自定义比较器_Java中的比较器:自定义规则!!!
比较器
Java语言中的比较器分为两种:
Comparable比较器:Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。(作用在实体类上)同时也被称之为:内部比较器。
Comparator比较器:我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。(作用在排序类上)同时也被称之为:外部比较器。
案例 1 内部比较器:
先创建一个类:
public class House implements Comparable{
//房子的面积及总价
private int area;
private int money;
public House() {
}
public House(int area, int money) {
this.area = area;
this.money = money;
}
@Override//自定义比较规则:按照面积比大小 (负数 0 正数)
public int compareTo(House o) {
return this.getArea()-o.getArea();
}
@Override
public String toString() {
return "House{" +
"area=" + area +
", money=" + money +
'}';
}
public int getArea() {
return area;
}
public void setArea(int area) {
this.area = area;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
创建测试类:
public class TestHouse {
public static void main(String[] args) {
House h1 = new House(90, 1000000);
House h2 = new House(100, 1500000);
House h3 = new House(50, 500000);
House h4 = new House(80, 2000000);
House h5 = new House(70, 1600000);
House[] houses={h1,h2,h3,h4,h5};
System.out.println("排序前!");
System.out.println(Arrays.toString(houses));
System.out.println("排序后!");
//给对象排序时,需要实体类实现 Comparable 接口,才可以实现排序
Arrays.sort(houses);
System.out.println(Arrays.toString(houses));
}
}
输出的结构为:
排序前!
[ 面积=90 价格=1000000 , 面积=100 价格=1500000 , 面积=50 价格=500000 , 面积=80 价格=2000000 , 面积=70 价格=1600000 ]
排序后!
[ 面积=50 价格=500000 , 面积=70 价格=1600000 , 面积=80 价格=2000000 , 面积=90 价格=1000000 , 面积=100 价格=1500000 ]
因此可以看出排序依据按照我们定义的规则完成!!!
案例 2 外部比较器:
先创建一个任意类来进行我们的操作:
public class Dog {
private String name;
private int age;
@Override
public String toString() {
return
"名字=" + name +
"年龄=" + age;
}
public Dog() {
}
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
再创建一个外部比较器类继承 Comparator 接口并写 compare 方法:
public class CompareDog implements Comparator {
@Override
public int compare(Dog o1, Dog o2) {
//return o1.getAge()-o2.getAge();根据年龄排序
//把每个字符变成int类型后再进行比较
return o1.getName().compareTo(o2.getName());//根据名字排序
}
}
最后创建测试类测试:
public class TestDog {
public static void main(String[] args) {
Dog[]dogs={
new Dog("菲菲",5),
new Dog("前前",9),
new Dog("嘿嘿",1),
new Dog("蕾蕾",6),
new Dog("牛牛",4)
};
System.out.println("排序前:");
System.out.println(Arrays.toString(dogs));
System.out.println("排序后:");
Arrays.sort(dogs,new CompareDog());
System.out.println(Arrays.toString(dogs));
}
}
运行结果为:
排序前:
[ 名字=菲菲 年龄=5 , 名字=前前 年龄=9 , 名字=嘿嘿 年龄=1 , 名字=蕾蕾 年龄=6 , 名字=牛牛 年龄=4 ]
排序后:
[ 名字=嘿嘿 年龄=1 , 名字=牛牛 年龄=4 , 名字=菲菲 年龄=5 , 名字=蕾蕾 年龄=6 , 名字=前前 年龄=9 ]
因此可以看出排序依据按照我们定义的规则完成!!!
当然名字也可以排序,按照汉字的排序规则排序!
本文地址:https://blog.csdn.net/DSM781314056/article/details/111997739
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
java中自定义比较器_Java中的比较器:自定义规则!!!相关推荐
- java中同步组件_Java并发编程(自定义同步组件)
并发包结构图: 编写一个自定义同步组件来加深对同步器的理解 业务要求: * 编写一个自定义同步组件来加深对同步器的理解. * 设计一个同步工具:该工具在同一时刻,只允许至多两个线程同时访问,超过两个线 ...
- java中的集合_Java中集合中的基本概念
集合:保存多个其他对象的对象,不能保存简单类型. Collection框架的结构如下: Collection是最基本的集合接口,一个Collection代表一组object,即Collection的元 ...
- java 异常处理发生异常_Java中的异常处理
java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...
- java中default关键字_Java 中的 default 关键字及代码示例
本文通过代码示例介绍如何在 Java 中使用 default 关键字. 基本上,有 3 个地方可以使用 Java 中的 default 关键字: 在 switch case 语句中指定默认值 在 Ja ...
- java -jar 工作原理_Java 中的 jar ,天天见,可是你知道它的运行机制吗?
本文由读者 muggle 投稿,muggle 是一位极具极客精神的 90 后单身老实猿,他的博客地址是:http://muggle.javaboy.org/ 今天介绍两个大家每天都在用但是却很少去了解 ...
- java变量存储位置_java 中变量存储位置的区别
[原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...
- java可以多重继承吗_Java中的多重继承与组合vs继承
java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...
- java中有没有栈_Java中堆和栈有什么区别
stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...
- java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...
项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...
- java 删除list元素_JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末 ...
最新文章
- LCS最长公共子序列和LIS最长上升子序列——例题剖析
- 在家办公的第一天,钉钉、企业微信集体“崩溃”...
- c++学习笔记之静态成员函数
- jQuery实现图片延迟加载
- flash写保护原理_为什么固态会掉盘?著名的30分钟大法修复是什么原理?
- CCIE理论-第八篇-SD-WAN(三)+DAI(动态ARP检测)
- 自回归AR模型、移动平均MA模型、自回归移动平均ARMA模型
- mysql 命令行执行存储过程_mysql 命令行执行存储过程
- ThreadPool执行异步操作
- 主从复制之操作实践(二)
- bilibili 韩顺平Java后端学习路线
- 海康威视二次开发 python_海康威视面试python后端题
- win7安装Android Studio
- jQuery手动触发事件
- 大型传统企业要不要提升自身的IT研发能力
- Linux就该这么学第十三节课学习心得
- 新手看Mockplus2.3
- python常见函数sort()对列表元素进行排序
- Redis从入门到深入-删除策略(18)
- 阿里云视频点播技术能力盘点
热门文章
- 支持移动端深度学习的几种开源框架
- Hadoop Intellij IDEA 建demo
- android 判断有线耳机、蓝牙耳机连接
- C++矩阵处理工具——Eigen
- java 基本类型 object_Java常用类-Object类
- java resultset jdbc_【JDBC系列】JDBC原生处理ResultSet
- java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...
- nginx关于域名解析的源码分析
- linux下lua bit模块的安装
- linux a文本编辑大全,Linux sed 命令 - Linux文档编辑命令大全