前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中的排序--排序容器_TreeSet与TreeMap

java中的排序--排序容器_TreeSet与TreeMap

作者头像
wfaceboss
发布2019-04-08 10:27:20
1.7K0
发布2019-04-08 10:27:20
举报
文章被收录于专栏:wfacebosswfaceboss

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方法的实体类

代码语言:javascript
复制
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()构造器

代码语言:javascript
复制
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接口的实体类

代码语言:javascript
复制
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)构造器--提供额外的业务排序类(匿名内部类的方式)

代码语言:javascript
复制
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:键可以排序且不可重复。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档