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

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

TreeSet在Set的元素不重复的基础之上引入排序的概念,其中对自身拥有Comparable的元素,可以直接进行排序,比如字符串,按照字母的自然顺序排序,此处说下对于自定义对象排序的方式。

1、存储元素的类实现Comparable接口

实现Comparable接口,其中只有一个方法

compareTo(Object obj)

obj:是用来比较的对象,也就是前边进入TreeSet的对象

继续以Person来举例,首先实现Person类,代码如下:

class Person implements Comparable{    private String name;    private int age;    public Person(String name, int age)    {        this.name = name;        this.age = age;    }        //特别要注意的是此处也是TreeSet识别重复元素的规则,当年龄一样的时候要判断姓名是否相同,否则若年龄相同的话就不能存入TreeSet    public int compareTo(Object obj)    {        if(!(obj instanceof Person))            throw new RuntimeException("hehe");        Person p = (Person)obj;        int ageGap = this.age - p.age;         if(ageGap > 0)            return 1;        else if(ageGap < 0)            return -1;        else            return this.getName().compareTo(p.getName());    }    public void setName(String name)    {        this.name = name;    }    public void setAge(int age)    {        this.age = age;    }    public String getName()    {        return this.name;    }    public int getAge()    {        return this.age;    }}

2、创建TreeSet时向其中加入Comparator

当元素不具备比较性时,此时只能为容器添加比较器来解决问题,当元素具备比较性,并且容器具备比较器,此时要以比较器为主。

继续以Person作为例子

定义Comparator

//注意Comparator是一个泛型接口class PersonComparator implements Comparator
{ public int compare(Person p1, Person p2) { int number = p1.getName().compareTo(p2.getName()); //先判断姓名,再判断年龄,和Comparable一样的,只比较一个条件会导致另一个条件不同的元素无法存入TreeSet if(number == 0) return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge())); else return number; }}

如何使用

public class Test{    public static void main(String[] args)    {                    //TreeSet的构造方法中有用于接收比较器                TreeSet
ts = new TreeSet<>(new PersonComparator()); ts.add(new Person("zhangsi", 34)); ts.add(new Person("zhangsi", 25)); ts.add(new Person("lisi", 34)); ts.add(new Person("zhangsi", 567)); ts.add(new Person("wangwu", 84)); ts.add(new Person("zhangsi", 23)); Iterator
it = ts.iterator(); while(it.hasNext()) { Person p = it.next(); System.out.println(p.getName()+"%%%%%"+p.getAge()); } }}

 

转载于:https://www.cnblogs.com/fantasy01/p/3974034.html

你可能感兴趣的文章
NLog简单使用
查看>>
MySQL入门很简单-触发器
查看>>
LVM快照(snapshot)备份
查看>>
Struts2 - 与 Servlet 耦合的访问方式访问web资源
查看>>
绝望的第四周作业
查看>>
一月流水账
查看>>
数论四大定理
查看>>
npm 常用指令
查看>>
C#基础知识面试经典[整理]
查看>>
微信 oauth2 两次回调
查看>>
洛谷P1099 树网的核
查看>>
Spring Cloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine
查看>>
阅读思考作业2
查看>>
Python_记一次网站数据定向爬取实现
查看>>
Oracle SQL
查看>>
repo常用命令及常见问题汇总
查看>>
redis缓存穿透和缓存雪崩
查看>>
localstorage和cookie封装在一起更方便
查看>>
JVM垃圾收集器
查看>>
国庆七天乐——第六天
查看>>