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. sofa-rpc 服务端源码流程走读

    sofa-rpc是阿里开源的一款高性能的rpc框架,这篇文章主要是对sofa-rpc provider启动服务流程的一个代码走读,下面是我简单绘制的一个基本的关系流程图 下面我们根据sofa-rpc代 ...

  2. Java第05次实验提纲(Java图形界面编程)

    1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...

  3. setvlet基础知识

    Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览 ...

  4. Daubechies小波介绍

    Daubechies小波是正交.连续且紧支撑的. 正交条件下,$H(\omega)$必须满足下式: $|H(\omega)|^2+|H(\omega + \pi)|^2 =1$ 连续紧支撑条件下,$H ...

  5. 可用于在 Microsoft.NET Framework 4.0 中的 ASP.NET 浏览器定义文件的修补程序

    http://support.microsoft.com/kb/2600088 此修补程序为 Internet Explorer 和 Mozilla Firefox 在浏览器定义文件引入了更新的定义. ...

  6. static link:关于gcc连接静态库的几种方式

    开发一个应用程序不可避免要使用多个第三方库(library).默认情况下,gcc采用动态连接的方式连接第三方库,比如指定-lpng,连接程序就会去找libpng.so. gcc提供了一个-static ...

  7. P2430严酷的训练

    传送 这个题的题干很长,长到令人恶心 这个题的p乍一看好像没有卵用,但其实他很有用(废话).这里的“费用”不再是tw[i](wky做第i道题的时间),而是tw[p[i]](wky做第i道题所对应的知识 ...

  8. load() 方法

    jQuery ajax - load() 方法 $("button").click(function(){ $("div").load('demo_ajax_l ...

  9. selector的小箭头去除

    selector的小箭头去除 .not-arrow{ -webkit-appearance:none; -moz-appearance:none; appearance:none; /*去掉下拉箭头* ...

  10. etcd安装和所遇到的坑

    首先参照 https://www.cnblogs.com/lyzw/p/6016789.html来安装 虚拟机:VMware® Workstation 12 Pro 系统:CentOS Linux r ...