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

  1. Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...

  2. java中字符串的排序(1)

    按照前段时间在快速.冒泡等排序的评论中提到是否可以进行字符串的排序,由于最近有考试,时间比较紧,所以今天才实现此功能.此功能是针对一串字符川进行的实现,运行后的结果如下所示: 具体的程序相对较为简单, ...

  3. java中的选择排序之降序排列

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

  4. java中Collections.sort排序详解

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

  5. java中List的排序功能的实现

    今天在工作的时候,遇到了List排序的问题,所以总结了一下,与大家分享.Collections.sort排序的时候,用到了Comparator接口下面的compare()方法.下面的小例子中,还用到了 ...

  6. (网页)java中Collections.sort排序详解(转)

    转自CSDN: Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b, ...

  7. [转]java中Collections.sort排序详解

      Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e, ...

  8. Java中Collections.sort()排序详解

      public static void main(String[] args) { List<String> list = new ArrayList<String>(); ...

  9. Java中List的排序和List的MAp

    这里是一个类中类去实现条件优先排序的问题 package com.sun; import java.util.ArrayList; import java.util.Arrays; import ja ...

随机推荐

  1. ul或者ol中添加li元素

    <!doctype html><html>    <head>        <meta charset="utf-8">      ...

  2. bzoj4865: [Ynoi2017]由乃运椰子

    在线询问区间众数,传统的分块(记录块间众数和每个权值的出现次数)做法被卡空间(分块用的空间是O(块数*(块数+权值种类数))),因此考虑去掉出现次数较小的数,只用分块维护出现次数较大的数.设K为分界线 ...

  3. java设计模式-责任链

    背景:要把<script>等<>html标签替换掉:把敏感词屏蔽或者替换等: 1.刚开始可能这么写: public class Main { public static voi ...

  4. 解决python中路径中包含中文无法找到文件的问题

    a="C:\Users\Dell\Desktop\ATOU\公共测试用例" (带中文的路径) a=a.decode("utf-8").encode(" ...

  5. Oracle group by

    group by 简单点理解就是根据什么分组 为此 group by job   根据job进行分组 举例:在Oracle当中scott/oracle 下有emp表 进行如下操作  体会order b ...

  6. Html的本质及在web中的作用

    概要 本文以一个Socket程序为例由浅及深地揭示了Html的本质问题,同时介绍了作为web开发者我们在开发网站时需要做的事情 Html的本质以及开发需要的工作 1.服务器-客户端模型 其实,对于所有 ...

  7. Course List for Student

    题目描述 Zhejiang University has 40000 students and provides 2500 courses. Now given the student name li ...

  8. 知识点:Mysql 基本用法之触发器

    触发器 使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为 注意:没有查询 一 .创建触发器 触发器基础语法: # 插入前 CREATE TRIGGER tri_before_insert_ ...

  9. python网页爬虫开发之一

    1.beautifulsoap4 和 scrapy解析和下载网页的代码区别 bs可以离线解释html文件,但是获取html文件是由用户的其他行为的定义的,比如urllib或者request : 而sc ...

  10. java类加载器 Bootstrap、ExtClassLoader、AppClassLoader的关系

    1.Bootstrap. ExtClassLoader. AppClassLoader是java最根正苗红的类加载器.2.Bootstrap是本地代码编写的(例如C), ExtClassLoader. ...