java的Set集合:TreeSet集合

1.TreeSet类

TreeSet使用红黑树的数据结构来存储集合元素

TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。如果希望TreeSet能正常运转,只能添加同一种类型对象。

当把一个对象加入TreeSet集合时,TreeSet调用该对象的compareTo(Object obj)方法与容器中的其他对象比较大小,然后根据红黑树结构找到它的存储位置,如果这两个对象通过compareTo(Object obj)方法比较相等,新对象将无法添加到TreeSet集合中。

  ①自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写compareTo(Object obj)方法,返回0则表示是同一个对象,否则为不同对象。
  
  对于TreeSet集合,他判定两个对象是否相等的唯一标准: 两个对象通过compareTo(Object obj)的方法比较是否返回0,如果返回0,TreeSet认为他们相等,否则认为他们不想等。
  

代码

package com.cn;

import java.util.TreeSet;

class R implements Comparable{

    int count;

    public R(int count){
        this.count = count;
    }

    public String toString(){
        return "R[count:" + count +"]";
    }

    @Override
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        R r = (R)o;
        if(r.count == this.count){
            return 0;
        }else if(r.count > this.count){
            return -1;
        }else{
            return 1;
        }
    }

}

public class TreeSET {

    public static void main(String[] args) {
        TreeSet ts = new TreeSet();
        ts.add(new R(5));
        ts.add(new R(10));
        ts.add(new R(100));
        System.out.println(ts);
    }

}

  ②定制排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());
  
  

2 .EnumSet

4.比较

HashSet的元素存放顺序和添加进去时候的顺序没有任何关系;而LinkedHashSet 则保持元素的添加顺序;TreeSet则是对我们的Set中的元素进行排序存放。
一般来说,当要从集合中以有序的方式抽取元素时,TreeSet 实现就会有用处。为了能顺利进行,添加到 TreeSet 的元素必须是可排序的。 而同样需要对添加到TreeSet中的类对象实现 Comparable 接口的支持。对于Comparable接口的实现。假定一棵树知道如何保持 java.lang 包装程序器类元素的有序状态。一般说来,先把元素添加到 HashSet,再把集合转换为 TreeSet 来进行有序遍历会更快。这点和HashMap的使用非常的类似。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值