9.30JavaSE Set

本文详细介绍了Java中的Set接口及其特点,着重讲解了TreeSet的底层实现——红黑树。通过自定义比较器,展示了如何实现TreeSet中元素的定制排序。同时,对比了Collections.sort()方法在List排序上的应用。文章强调了泛型在集合中的使用,以及软件设计的开闭原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set: 是一个接口,  

特点     

无序: 存入的数据和取出的数据不一定相同叫做无序。

不可重复的原因:  因为Set 是无序的

TreeSet   底层是红黑树   

Compare 比较器

  再自定义类中覆写compareto方法    
@Override
    public int compareTo(Object o) {
        return 1;
    }
  1. Treeset 中放入的类必须相同
  2. TreeSet中方法的类,必须实现Comparablef接口,覆写其中的ComparTo方法
  3. ComparTo中返回值:
  • 0表示前后添加的元素相同Set 不在放入。
  • 1整数 表示需要相比较的前后两个对象换位置
  • -1 表示不需要换位置
  • 只能修改自己定义的类中CompareTol的方法,Integer,String,Date等Java自带的无法修改

软件设计的六大原则之一  开闭原则。

  • 对修改关闭   不能修改Java 中的自带源码
  • 对扩展开放    可以通过继承实现,来实现扩展开放

Compartor比较器   优先级比Comparable高

   1.在直接用

public class Set_03 {
    public static void main(String[] args) {


        Set a = new TreeSet(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Use_01 o11 = (Use_01) o1;
                Use_01 o12 = (Use_01) o2;
                return ((Use_01) o2).getId() - o11.getId();//倒叙
            }
        });
        a.add(new Use_01("张三", 1));
        a.add(new Use_01("张三", 3));
        a.add(new Use_01("张三", 2));
        a.add(new Use_01("张三", 4));
        System.out.println(a);




    }

2.Collections.sort   排序 只能在Llis中使用

public class Set_03 {
    public static void main(String[] args) {

              只能用以List 中
        List a = new ArrayList();
        a.add(new Use_01("张三", 1));
        a.add(new Use_01("张三", 3));
        a.add(new Use_01("张三", 2));
        a.add(new Use_01("张三", 4));
        Collections.sort(a, new Comparator() {

            @Override
            public int compare(Object o1, Object o2) {
                Use_01 o11 = (Use_01) o1;
                Use_01 o12 = (Use_01) o2;
                return ((Use_01) o2).getId() - o11.getId();//倒叙
                 return ( o11.getId()-(Use_01) o2).getId() ;//正序


            }
        });
        System.out.println(a);
    }
}

泛型: <E>

优点 : 指定某一个类型,传入其他类型会在编译的时候报错。

缺点:不灵活,只能穿某一个。

  < 规定的类> 添加规定类中的类

集中泛型的代表

T(Type)具体的)ava类
E(Element)在集合中使用,因为集合中存放的是元素
KV(key value)分别代表java键值中的Key Value
N(Number)数值类型
?表示不确定的Java类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值