博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的排序--排序容器_TreeSet与TreeMap
阅读量:6092 次
发布时间:2019-06-20

本文共 3525 字,大约阅读时间需要 11 分钟。

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
{ 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
employee = new TreeSet
(); 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
persons = new TreeSet
(new java.util.Comparator
() { @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:键可以排序且不可重复。

其键的排序方式与上述相同。

 

posted on
2019-01-29 14:31 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wfaceboss/p/10333310.html

你可能感兴趣的文章
使用cygwin在windows上模拟unix环境,解决不能显示中文的问题
查看>>
No module named urls最新解决方法
查看>>
linux 中 用户管理 (composer 时不能root 遇到)
查看>>
for循环json对象取值
查看>>
EF中Repository模式应用场景
查看>>
单位圆盘的全纯自同构群Aut B(0,1)
查看>>
实验二 Java面向对象程序设计
查看>>
Sicily 1504:Slim Span(最小生成树)
查看>>
(树)Subtrees -- hdu -- 5524
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
11.查询截取分析_慢查询日志
查看>>
(转)HTML的代码(从朋友那转的,看着觉得会有用就转了)
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>