java中的排序--排序容器_TreeSet与TreeMap
1.TreeSet:数据元素可以排序且不可重复。
对比:
(1)Set接口:HashSet,元素必须重写hashcode和equals方法。
(2)TreeSet:只要可以排序即可。去重:比较等于0即重复。
TreeSet数据排序两种方式:
注意:TreeSet是在添加数据时进行排序,数据更改不会影响原来的顺序,因此不能修改类中数据,否则可能重复。需要在设计类时使用final修饰字段属性,同时不提供相应set、get方法。
1)、若选用无参的new TreeSet()构造器,需要元素本身可以排序方能使用,也即实体类实现java.lang.Comparable接口重写compareTo接口。
(1)新建一个实现java.lang.Comparable接口并重写comparaTo方法的实体类
package top.wfaceboss.caseSort02; public class Worker implements java.lang.Comparable<Worker> {
private String type;
private double salary; public Worker() {
} public Worker(String type, double salary) {
super();
this.type = type;
this.salary = salary;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} /**
* 按工资升序
*/
@Override
public int compareTo(Worker o) {
return this.salary > o.salary ? 1 : (this.salary == o.salary ? 0 : -1);
} /**
* 重写toString
*/
@Override
public String toString() {
return "工种:" + this.type + ",工资:" + this.salary + "\n";
} }
(2)使用无参的new TreeSet()构造器
package top.wfaceboss.caseSort02; import java.util.TreeSet; public class TreeSetDemo {
public static void main(String[] args) {
Worker w1 = new Worker("垃圾回收员", 5000);
Worker w2 = new Worker("农工", 2000);
Worker w3 = new Worker("程序员", 10000); TreeSet<Worker> employee = new TreeSet<Worker>();
employee.add(w1);
employee.add(w2);
employee.add(w3);
System.out.println(employee);
}
}
结果为:
2)、若选用带参的new TreeSet(Comparator<? super E> comparator)构造器,需要提供额外的排序业务类(匿名内部类的方式)实现java.util.Comparator接口,重写compare方法。
(1)新建一个没有实现java.lang.Comparable接口的实体类
package top.wfaceboss.caseSort; public class Person {
private final String name;
private final int hangsome; public Person() {
name = null;
hangsome = 0;
} public Person(String name, int hangsome) {
super();
this.name = name;
this.hangsome = hangsome;
} public String getName() {
return name;
} public int getHangsome() {
return hangsome;
} /**
* 重写toString方法
*/
@Override
public String toString() {
return "姓名:" + this.name + ",帅气指数:" + this.hangsome + "\n"; }
}
(2)使用带参的new TreeSet(Comparator<? super E> comparator)构造器--提供额外的业务排序类(匿名内部类的方式)
package top.wfaceboss.caseSort; import java.util.TreeSet; public class TreeSetDemo01 {
public static void main(String[] args) {
Person p1 = new Person("小红", 100);
Person p2 = new Person("大白", 1000);
Person p3 = new Person("小明", 10000);
Person p4 = new Person("小黑", 100000); // 依次存放到TreeSet容器中
// 由于Person类没有实现java.lang.Comparable重写compareTo接口 ,因此需要提供额外的业务排序类,否则会出错 TreeSet<Person> persons = new TreeSet<Person>(new java.util.Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getHangsome() - o2.getHangsome();
}
}); persons.add(p1);
persons.add(p2);
persons.add(p3);
persons.add(p4); System.out.println(persons);
}
}
结果为:
2.TreeMapt:键可以排序且不可重复。
其键的排序方式与上述相同。
java中的排序--排序容器_TreeSet与TreeMap的更多相关文章
- Java中常见的排序方法
本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...
- java中字符串的排序(1)
按照前段时间在快速.冒泡等排序的评论中提到是否可以进行字符串的排序,由于最近有考试,时间比较紧,所以今天才实现此功能.此功能是针对一串字符川进行的实现,运行后的结果如下所示: 具体的程序相对较为简单, ...
- java中的选择排序之降序排列
import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...
- java中Collections.sort排序详解
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...
- java中List的排序功能的实现
今天在工作的时候,遇到了List排序的问题,所以总结了一下,与大家分享.Collections.sort排序的时候,用到了Comparator接口下面的compare()方法.下面的小例子中,还用到了 ...
- (网页)java中Collections.sort排序详解(转)
转自CSDN: Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b, ...
- [转]java中Collections.sort排序详解
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e, ...
- Java中Collections.sort()排序详解
public static void main(String[] args) { List<String> list = new ArrayList<String>(); ...
- Java中List的排序和List的MAp
这里是一个类中类去实现条件优先排序的问题 package com.sun; import java.util.ArrayList; import java.util.Arrays; import ja ...
随机推荐
- ul或者ol中添加li元素
<!doctype html><html> <head> <meta charset="utf-8"> ...
- bzoj4865: [Ynoi2017]由乃运椰子
在线询问区间众数,传统的分块(记录块间众数和每个权值的出现次数)做法被卡空间(分块用的空间是O(块数*(块数+权值种类数))),因此考虑去掉出现次数较小的数,只用分块维护出现次数较大的数.设K为分界线 ...
- java设计模式-责任链
背景:要把<script>等<>html标签替换掉:把敏感词屏蔽或者替换等: 1.刚开始可能这么写: public class Main { public static voi ...
- 解决python中路径中包含中文无法找到文件的问题
a="C:\Users\Dell\Desktop\ATOU\公共测试用例" (带中文的路径) a=a.decode("utf-8").encode(" ...
- Oracle group by
group by 简单点理解就是根据什么分组 为此 group by job 根据job进行分组 举例:在Oracle当中scott/oracle 下有emp表 进行如下操作 体会order b ...
- Html的本质及在web中的作用
概要 本文以一个Socket程序为例由浅及深地揭示了Html的本质问题,同时介绍了作为web开发者我们在开发网站时需要做的事情 Html的本质以及开发需要的工作 1.服务器-客户端模型 其实,对于所有 ...
- Course List for Student
题目描述 Zhejiang University has 40000 students and provides 2500 courses. Now given the student name li ...
- 知识点:Mysql 基本用法之触发器
触发器 使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为 注意:没有查询 一 .创建触发器 触发器基础语法: # 插入前 CREATE TRIGGER tri_before_insert_ ...
- python网页爬虫开发之一
1.beautifulsoap4 和 scrapy解析和下载网页的代码区别 bs可以离线解释html文件,但是获取html文件是由用户的其他行为的定义的,比如urllib或者request : 而sc ...
- java类加载器 Bootstrap、ExtClassLoader、AppClassLoader的关系
1.Bootstrap. ExtClassLoader. AppClassLoader是java最根正苗红的类加载器.2.Bootstrap是本地代码编写的(例如C), ExtClassLoader. ...