重写comparater比较器
TreeSet
能自动对对象进行排序,但是一般需要在类中重写比较方法
比较器介绍
在类中实现Comparable接口,并重写compareTo方法
排序对象类
package typing.overridecompare;
public class Person implements Comparable<Person>{
private String name;
private int age;
Person() {
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "[name:" + name + ",age:" + age + "]";
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person person) {
// 先以年龄进行排序,再以姓名长度进行排序
int num = this.getAge() - person.getAge();
if (num==0) {
num = this.getName().length() - person.getName().length();
}
return num;
}
}
创建TreeSet对象并添加Person对象自动排序
package typing.overridecompare;
import java.util.Random;
import java.util.TreeSet;
public class OverrideCompareTo {
private TreeSet<Integer> treeint;
private TreeSet<Person> treeperson;
public void treeInt() {
treeint = new TreeSet<Integer>();
Random r = new Random();
for (int i = 0; i < 10; i ++)
treeint.add(r.nextInt(100));
System.out.println(treeint);
}
public void treePerson() {
treeperson = new TreeSet<Person>();
treeperson.add(new Person("ali",20));
treeperson.add(new Person("aiya",16));
treeperson.add(new Person("bob", 16));
treeperson.add(new Person("boer", 21));
treeperson.add(new Person("lobo",15));
System.out.println(treeperson);
}
}
测试类
OverrideCompareTo compare = new OverrideCompareTo();
compare.treePerson();//输出结果:[[name:lobo,age:15], [name:bob,age:16], [name:aiya,age:16], [name:ali,age:20], [name:boer,age:21]]
自定义比较器,在比较器中实现,需要实现Comparator接口并重写compare方法
自定义比较器类
package typing.overridecompare;
import java.util.Comparator;
public class CharCompare implements Comparator<Character>{
@Override
public int compare(Character c1, Character c2) {
int num = c1 -c2;
if (num == 0)
num = 1;
return num;// 以字符串的ascll顺序进行排序
}
}
测试类
TreeSet<Character> charset = new TreeSet<Character>(new CharCompare());// 在声明TreeSet时传入自定义比较器对象
Scanner input = new Scanner(System.in);
String line = input.nextLine();
char[] arr = line.toCharArray();
for (char ch:arr)
charset.add(ch);
System.out.println(charset);
// 输入abbcba,输出aabbbc
重写comparater比较器的更多相关文章
- java中Comparator比较器顺序问题,源码分析
提示: 分析过程是个人的一些理解,如有不对的地方,还请大家见谅,指出错误,共同学习. 源码分析过程中由于我写的注释比较啰嗦.比较多,导致文中源代码不清晰,还请一遍参照源代码,一遍参照本文进行阅读. 原 ...
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
- struts2 Advanced Learning
catalog . 引言 . struts2的类型转换 . struts2的输入校验 . struts2的拦截器机制 . 使用struts2的Ajax支持 . struts2 OGNL表达式 . st ...
- Java集合之TreeMap
Map的单元是对键值对的处理,之前分析过的两种Map,HashMap和LinkedHashMap都是用哈希值去寻找我们想要的键值对,优点是由O(1)的查找速度. 那如果我们在一个对查找性能要求不那么高 ...
- HashMap与TreeMap的区别
首先描述下什么是Map. 在数组中我们是通过数组的下标来对其内容进行索引的,而在Map中我们是通过对象对对象进行索引的,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平常说的键值对. ...
- mapreduce计算框架
一. MapReduce执行过程 分片: (1)对输入文件进行逻辑分片,划分split(split大小等于hdfs的block大小) (2)每个split分片文件会发往不同的Mapper节点进行分散处 ...
- Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理
本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...
- 20165207 2017-2018-2《Java程序设计》课程总结
20165207 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:学习基础与C语言调查反馈 预备作业3:Linux安装与命令 ...
- java源码之TreeMap
Map的单元是对键值对的处理,之前分析过的两种Map,HashMap和LinkedHashMap都是用哈希值去寻找我们想要的键值对,优点是理想情况下O(1)的查找速度. 那如果我们在一个对查找性能要求 ...
随机推荐
- apache的bin目录下的apxs有什么作用? PHP模块加载运行方式
2016-03-26 16:40:28 一个perl脚本安装http server扩展模块用的apxs - APache eXtenSion tool –with-apxs2=/usr/local ...
- shell脚本大小写转换
几个方法 1.tr命令 2.sed替换 3.awk的tolower() toupper() 4.perl语言 详见 http://blog.51cto.com/wangxiaoyu/197623 L ...
- Java中产生随机数的两个方法
Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...
- CSS之padding&margin
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Docker搭建PXC集群
如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [root@hongshaorou ~]# ...
- CentOS7.5下安装Mycat连接MySQL8.0
MyCat详细介绍,请参考https://www.biaodianfu.com/mycat.html 9066管理端口,请参考https://www.cnblogs.com/parryyang/p/5 ...
- Postgres——pgadmin复制无主键单表至本地数据库
数据库中存在无主键单表gongan_address_all ,需要将余杭区数据导出成另外一张表,因为数据量太大,sql语句效率太差. 通过sql语句查询出余杭区数据,并导出成csv,sql等格式,再导 ...
- cxf+spring+restful简单接口搭建
之前都是用soap协议搭建,最近学了下restful,以便日后翻阅,小生才疏学浅,不足之处请多见谅. 1.maven配置 <project xmlns="http://maven.ap ...
- Requests将verify设置为False后取消警告的方式
方法一 import requests import urllib3 urllib3.disable_warnings() resp = requests.get('https://www.***.c ...
- Java 详解 JVM 工作原理和流程
Java 详解 JVM 工作原理和流程 作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java ...