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.6+Scrapy爬取知名技术文章网站

    爬取分析 伯乐在线已经提供了所有文章的接口,还有下一页的接口,所有我们可以直接爬取一页,再翻页爬. 环境搭建 Windows下安装Python: http://www.cnblogs.com/0bug ...

  2. 黄聪:PHP JSON_ENCODE 不转义中文汉字的方法

    ios程序中不识别读取到的JSON数据中 \u开头的数据. PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 网上很多,但是其实都是错误的,正确的方法是在json_enc ...

  3. maven使用配置

    一.maven常用的命令 maven通过命令对工程进行编译.测试.打包.发布.运行(基本的顺序) mvn compile:编译 mvn clean:清理,将target下的class文件清理 mvn ...

  4. Svn过滤

    http://blog.csdn.net/hemingwang0902/article/details/6904205

  5. nginx 操作笔记

    测试nginx 配置是否成功 service nginx configtest

  6. PAT 乙级1030 完美数列(25) C++版

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  7. python programming作业5

      # -*- coding: utf-8 -*- class ageError(Exception): pass class salaryError(Exception): pass class s ...

  8. UTC时间和普通时间的区别

            UTC时间 [root@openstack01 ~]# timedatectl Local time: Sat 2018-08-18 23:04:24 CST Universal ti ...

  9. android 根据滑动隐藏或显示导航 类似手机QQ好友个人信息

    //重写ScrollView public class NotifyingScrollView extends ScrollView { /** * @author Cyril Mottier */ ...

  10. 禁用win7更新

    关闭自动更新服务Windows Update 第一种方法 ---------------------------------------------------------------- Win + ...