JAVA复习5(TreeSet)

Set 接口

 

特点: 最大的特点 就是集合中的元素 不可重复  其也是Collection接口的子接口 , Set本身也是一个接口,同样不能直接使用,需要实例化该接口的实现类 Set接口下面的实现类:

常用

1 TreeSet   有序 ,不可重复

 

public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable

 

 

常用方法  来自Collection

 

 

范例: 观察TreeSet子类的使用

public static void main(String[] args) {

          Set<String> all=new TreeSet<>();

         

          all.add("B");

         

          all.add("C");

         

          all.add("A");

         

          all.add("C");  //重复元素

         

          for(String str:all) {

              

               System.out.println(str);

          }

     }

 

通过观察以上代码发现,TreeSet 存放的数据有以下两个特点:

 

1 有序   为什么有序?

 

TreeSet的排序是通过compreable 接口中的compareTo方法完成的 该方法返回 3个取值

 

分别为: 1 升序   - 1 降序   0 重复元素的判断

范例: 使用自定义类完成TreeSet

 

public static void main(String[] args) {

         

         

          Set<Person> all=new TreeSet<>();

         

          all.add(new Person("张三",32));

         

          all.add(new Person("李四",20));

         

          all.add(new Person("张三",32));

         

          all.add(new Person("隔壁老王",89));  //重复元素

         

          for(Person per:all) {

              

               System.out.println(per);

          }

     }

 

出错了以下的错误:

Exception in thread "main" java.lang.ClassCastException: org.list.Person cannot be cast to java.lang.Comparable

     at java.util.TreeMap.compare(Unknown Source)

     at java.util.TreeMap.put(Unknown Source)

     at java.util.TreeSet.add(Unknown Source)

     at org.set.TreeSetDemo.main(TreeSetDemo.java:15)

 

说明在TreeSet中进行保存的时候,约定存储的类型必须实现一个接口,而这个接口就是comparable接口,如果没有这个接口则不能实现排序功能

 

范例:实现compareTo方法

@Override

     public int compareTo(Person o) {

          // TODO Auto-generated method stub

          if(this.age>o.age) {

               return 1;

          }else if(this.age<o.age) {

               return -1;

          }

          return 0;

     }

 

 

 

 

2 不可重复

 重复元素的区分 在TreeSet中是依靠compareTo方法是否返回0来判断的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值