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. Python3中Urllib库基本使用

    什么是Urllib? Python内置的HTTP请求库 urllib.request          请求模块 urllib.error              异常处理模块 urllib.par ...

  2. 查找Python项目依赖的库并生成requirements.txt

    使用pip freeze pip freeze > requirements.txt 这种方式配合virtualenv 才好使,否则把整个环境中的包都列出来了. 使用 pipreqs 这个工具的 ...

  3. Ubuntu Docker安装

    docker容器改变apt-get源 记得先:apt-get update 进入容器 cd /etc/apt echo "">sources.list echo " ...

  4. java中关于File类的细说

    File类是我们接触的比较多的类,当初学习是真是傻傻分不清啊.今天就总结一下file的一些比较不好区分的地方. 首先:当然就是构造方法 File f = new File("文件路径&quo ...

  5. 黄聪:多个wordpress网站(不同域名)共享用户数据的方法

    WordPress可以自定义用户数据表,这样多个wordpress网站就可以共享用户数据了,有时候这是非常方便的,这些Wordpress站点应该安装在同一个数据库下,数据表前缀各不相同.由于Wordp ...

  6. 黄聪:C# webBrowser控件禁用alert,confirm之类的弹窗解决方案

    同样的代码,我尝试了很多次都没有成功.最后终于成功了,是因为我没有在正确的事件里面调用这段代码. private void InjectAlertBlocker() { HtmlElement hea ...

  7. HBase与Zookeeper数据结构查询

    一.前言 最近一年了吧,总是忙于特定项目的业务分析和顶层设计,很少花时间和精力放到具体的技术细节,感觉除了架构理念和分析能力的提升,在具体技术层次却并没有多大的进步.因为一些原因,总被人问及一些技术细 ...

  8. [蓝桥杯]ALGO-101.算法训练_图形显示

    问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...

  9. Spring Cloud 各组件调优参数

    Spring Cloud整合了各种组件,每个组件往往还有各种参数.本文来详细探讨Spring Cloud各组件的调优参数. Tomcat配置参数 1 server: 2 tomcat: 3 max-c ...

  10. js读取iframe里的元素

    父层 <div id="SubStepNav" class="SubStepNav"> <iframe src="aaa.html& ...