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比较器的更多相关文章

  1. java中Comparator比较器顺序问题,源码分析

    提示: 分析过程是个人的一些理解,如有不对的地方,还请大家见谅,指出错误,共同学习. 源码分析过程中由于我写的注释比较啰嗦.比较多,导致文中源代码不清晰,还请一遍参照源代码,一遍参照本文进行阅读. 原 ...

  2. Java的比较器Comparable与Comparator

    在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...

  3. struts2 Advanced Learning

    catalog . 引言 . struts2的类型转换 . struts2的输入校验 . struts2的拦截器机制 . 使用struts2的Ajax支持 . struts2 OGNL表达式 . st ...

  4. Java集合之TreeMap

    Map的单元是对键值对的处理,之前分析过的两种Map,HashMap和LinkedHashMap都是用哈希值去寻找我们想要的键值对,优点是由O(1)的查找速度. 那如果我们在一个对查找性能要求不那么高 ...

  5. HashMap与TreeMap的区别

    首先描述下什么是Map. 在数组中我们是通过数组的下标来对其内容进行索引的,而在Map中我们是通过对象对对象进行索引的,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平常说的键值对. ...

  6. mapreduce计算框架

    一. MapReduce执行过程 分片: (1)对输入文件进行逻辑分片,划分split(split大小等于hdfs的block大小) (2)每个split分片文件会发往不同的Mapper节点进行分散处 ...

  7. Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

    本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...

  8. 20165207 2017-2018-2《Java程序设计》课程总结

    20165207 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:学习基础与C语言调查反馈 预备作业3:Linux安装与命令 ...

  9. java源码之TreeMap

    Map的单元是对键值对的处理,之前分析过的两种Map,HashMap和LinkedHashMap都是用哈希值去寻找我们想要的键值对,优点是理想情况下O(1)的查找速度. 那如果我们在一个对查找性能要求 ...

随机推荐

  1. <Vector Calculus>(by Paul C, Matthews) Notes

    现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...

  2. Hadoop 管理工具HUE配置-Hive配置

    1 前言 首先要配置好Hive,可以参见:http://www.cnblogs.com/liuchangchun/p/4761730.html 2 hive配置 找到beeswax标签,不叫hive, ...

  3. 8、Curator的监听机制

    原生的zookeeper的监听API所实现的方法存在一些缺点,对于开发者来说后续的开发会考虑的细节比较多. Curator所实现的方法希望摒弃原声API 的不足,是开发看起来更加的简单,一些重连等操作 ...

  4. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操(网络拷贝)

    环境:CentOS 6.7  + Mysql 5.7.19 + Xtraback 2.4.8 innobackupex常用参数: --user=USER 指定备份用户,不指定的话为当前系统用户 --p ...

  5. 使用Go编写WebAssembly

    I. Install go 1. down https://golang.org/dl/ go1.12.3.windows-amd64.zip 2. set path (1) GOROOTvar na ...

  6. sweetalert弹窗的使用

    之前接触到layer弹出层,今天又发现了一个非常实用的弹出层插件,它的名字叫做sweetalert. 官网地址:http://t4t5.github.io/sweetalert/ npm下载方式:np ...

  7. 虚拟机安装centOs+网络配置(完整说明)

    1.新建虚拟机(标准)   选择 (我以后下安装操作系统)       选择Linux 操作系统 版本为CentOS(32位)     虚拟机的名称和位置任意       磁盘容量如下即可     设 ...

  8. oracle12c安装[INS-30131]异常

    接昨天写到的oracle12c安装异常解决办法. 解决这个问题百度到两种解决办法: 方法一 1.1.检查开启服务 控制面板 → 管理工具 → 服务 找到TCP/IP 和 Server 状态调为“启动” ...

  9. javac编译错误: 编码UTF8/GBK的不可映射字符

    转自:https://blog.csdn.net/leytton/article/details/52740171 Linux下为UTF-8编码,javac编译gbk编码的java文件时,容易出现“错 ...

  10. SpringBoot 之 thymeleaf

    thymeleaf 的maven 配置我们都知道: <dependency> <groupId>org.springframework.boot</groupId> ...