泛型&通配符&TreeSet&二叉树 笔记

1. 泛型

1.1什么是泛型?

泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制

1.2泛型有什么作用?

  1. 把运行时期的问题提前到了编译期间

  2. 避免了强制类型转换

1.3泛型怎么用?

类后面->泛型类-------------ArrayList<E>extends AbstractList<E>

方法声明上->泛型方法---add(E e)&public E get(int index) (自定义泛型方法时,<E>写在void前面)

接口后面->泛型接口

1.4注意

创建泛型类的对象时,必须要给这个泛型确定具体的数据类型

*toArray->把集合转化成数组

String []strings=list.toArray(new String[list.size()]);//new String[list.size()=list,这种new出来的可以直接当对象使用
System.out.println(Arrays.toString(Strings));//Arrays.toString->把数组转成打印数组格式字符串

2. 通配符

通配符表上限:<? extends 类型>

    ArraryList<? extends Number>:他表示的类型是Numner或者其子类型

通配符表下限<? super类型

Arraylist<? super Numeber>:他表示的类型是Number或者其父类型

3. Set集合-TreeSet (遍历前必须定义排序规则)

3.1 Set集合特性

  • 去重复

  • 存取顺序不一致

  • 没有索引

3.2 TreeSet排序方式

  1. 自然排序(Comparable)

    • 使用空参构造创建TreeSet集合

    • 自定义的Student类实现Comparable接口

    • 重写里面的compatreTo方法()

       @Override
          public int compareTo(Student o) {
             int result= this.getAge()-o.getAge();
              result =result==0?this.getName().compareTo(o.getName()):result;
              return result;
          }

    this.comparaTo.o--->把字符串按照字典排序

  2. 比较器排序

    • 带参构造时使用

    • 让集合构造方法接收Comparator的实现类对象,重写compare

    • 排序规则必须按照要求的主要条件和次要条件

      TreeSet<String>tS=new TreeSet<String>(new Comparator<String>() {
                  @Override
                  public int compare(String o1, String o2) {
                      int result=o1.length()-o2.length();
                      result=result==0?o1.compareTo(o2):result;
                      return result;
                  }
              });

3.3两种排序小结

  • 在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序

    比如说当集合储存的是String,Intrger包装类等,自然排序写在源码中不能更改,这时候选择比较器排序
  • 两种方式中关于返回值的规则

    • 如果返回值为负数,存左边

    • 如果返回值为0, 不存

    • 如果返回值为正数,存右边

4.数据结构-二叉树

  • 二叉树

  • 二叉查找树

    较之二叉树,左边元素大,右边小
  • 平衡二叉树

    通过左旋和右旋来使每个节点两边长度差不超过1
  • 红黑树

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值