Java中TreeSet的用法

        TreeSet是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理。

        针对于二叉树,我们可以知道小的值存储在左边,大的值存储在右边,相等不存储。

        TreeSet属于集的范围,只能存放引用类型,不能用于基本数据类型它本身不能有重复的元素,当存入自定义的引用类型的时候就必须考虑到元素不可重复的这个特性,自定义引用类型类由自己定义,实现的接口的方法由自己实现,在用TreeSet存放元素的时候的排序规则由自己定义。

有两种实现排序的方式:

 1.自然顺序(Comparable)

  • TreeSet类的add()方法中会把存入的对象提升为Comparable类型
  • 调用对象的compareTo()方法和集合中的对象比较
  • 根据compareTo()方法返回的结果进行存储

2.比较器顺序(Comparator)

  • 创建TreeSet的时候可以指定一个Comparator
  • 如果传入了Comparator的子类对象,那么TreeSet就会按照比较器中的顺序排序
  • 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数

如果不想保证元素的唯一性,改一下compare方法就可以了,永远不要让它返回0。

代码:

package com.pocketdigi;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;

public class Main {
    static ArrayList list;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeSet ts=new TreeSet();
        ts.add(new People(5,"zhang"));
        ts.add(new People(3,"wang"));
        ts.add(new People(4,"li"));
        //TreeSet会按自然排序法自动排序,即3在5前,a在b前,如果传入的是自定义的对象,必须让该对象实现 Comparable接口
        Iterator it=ts.iterator();
        //TreeSet同样没有取出元素的方法,只能用迭代器
        while(it.hasNext()){
            System.out.println(it.next());
        }
        //结果按id排,顺序是3,4,5
    }

}
class People implements Comparable{
    int id;
    String name;
    People(int id,String name){
        this.id=id;
        this.name=name;
    }


    public String toString(){
        return "id:"+id+" name:"+name;
    }

    @Override
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        People p=(People)o;
        return id>p.id ? 1:(id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值