博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TreeSet
阅读量:6691 次
发布时间:2019-06-25

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

注意事项:

1、往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么久按照元素的自然顺序特性进行排序。

2、往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,吧元素的比较规则定义在compareTo()方法上。

3、如果比较元素的时候,compareTo方法的返回值是0,那么改元素就被视为重复元素,不允许添加。

4、往TreeSet添加元素的时候,如果元素本身不具备自然顺序属性,并且元素所属的类也没有实现comparable接口,那么必须要在创建TreeSet对象的时候传入一个比较器。(如何创建比较器?)

底层实现:红黑树(二叉树)的数据结构。  规则:左小右大。

    二叉树如果连续三个节点没有形成二叉树,则就会自动调整节点。

2、不具备自然排序属性,改元素所属的类必须实现comparable接口:例子:

package cd.itcast.runble;import java.util.TreeSet;/** * TreeSet自定义对象按某属性排序(实现Comparable接口) * @author 甘兴瑞 *2016/11/9 */class Emp implements Comparable{    int id;    String name;    int salary;    public Emp(int id, String name, int salary) {        this.id = id;        this.name = name;        this.salary = salary;    }    @Override    public int compareTo(Object o) {        Emp emp = (Emp)o;        //按薪水排序        return this.salary-emp.salary;    }    @Override    public String toString() {        return "{工号:"+this.id+",姓名:"+this.name+",薪水"+this.salary+"}";    }}public class Demo4 {    public static void main(String[] args) {        TreeSet  treeSet = new TreeSet();        treeSet.add(new Emp(110, "张三", 5000));        treeSet.add(new Emp(113, "李四", 6000));        treeSet.add(new Emp(115, "王五", 4000));        treeSet.add(new Emp(119, "老六", 5500));                System.out.println(treeSet); //[{工号:115,姓名:王五,薪水4000}, {工号:110,姓名:张三,薪水5000}, {工号:119,姓名:老六,薪水5500}, {工号:113,姓名:李四,薪水6000}]    }}

3、定义比较器,实现。例子:

package cd.itcast.runble;import java.util.Comparator;import java.util.TreeSet;/** * TreeSet自定义对象按某属性排序(实现Comparable接口) * @author 甘兴瑞 *2016/11/9 */class Emp {    int id;    String name;    int salary;    public Emp(int id, String name, int salary) {        this.id = id;        this.name = name;        this.salary = salary;    }//    @Override//    public int compareTo(Object o) {//        Emp emp = (Emp)o;//        //按薪水排序//        return this.salary-emp.salary;//    }    @Override    public String toString() {        return "{工号:"+this.id+",姓名:"+this.name+",薪水"+this.salary+"}";    }} //自定义比较器,在创建treeset的时候传入;class MyCompare implements Comparator{    @Override    public int compare(Object o1, Object o2) {        Emp e1 = (Emp)o1;        Emp e2 = (Emp)o2;        return e1.salary-e2.salary;    }}public class Demo4 {    public static void main(String[] args) {                MyCompare myCompare = new MyCompare();        TreeSet  treeSet = new TreeSet(myCompare);                treeSet.add(new Emp(110, "张三", 5000));        treeSet.add(new Emp(113, "李四", 6000));        treeSet.add(new Emp(115, "王五", 4000));        treeSet.add(new Emp(119, "老六", 5500));                System.out.println(treeSet);    }}

 

转载于:https://www.cnblogs.com/h-g-f-s123/p/6047586.html

你可能感兴趣的文章
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
机器人是如何完成避障的?机器人避障解决方案解读
查看>>
通过错误堆栈信息和源码分析错误来源
查看>>
C和C++ 读写文件速度问题
查看>>
layer.mobile 弹出框插件(2.0版)
查看>>
C#基础 条件语句、选择语句和循环语句
查看>>
bugzilla安装笔记
查看>>
Hadoop 2.0(YARN/HDFS)学习资料汇总
查看>>
hadoop命令执行hbase应用jar包时的环境变量加载问题
查看>>
awk常用注意事项--awk如何引用外部变量
查看>>
XenMobile学习文章总结
查看>>
Android开发者的混淆使用手册
查看>>
Telnet服务及协议
查看>>
SpringMVC深度探险
查看>>