泛型

概述

  • 泛型是一种类型参数,专门用来保存类型

    优点

  • 可以在编译时期对类型做检测,避免了 类型转换异常

  • 泛型在运行过程中会被擦除
  • 泛型名就是一个大写的英文字母,如果有多个泛型,那么使用逗号分隔

    • public class Student{ }

      自定义泛型

  • 自定义泛型类

    • 修饰符 class 类名 <>{ }
    • 泛型类中的泛型确定时机:
      • 创建一个类的对象
  • 自定义泛型接口
    • 修饰符 interface 接口名<泛型名>{ }
    • 泛型接口中的泛型确定时机:
      • 当一个实现类,实现接口时,确定泛型
        • class MyList implements MyCollection{ }
      • 当一个实现类,实现接口时,不确定接口的泛型类型,那么回到泛型类的使用
        • class MyList implements MyCollection{ }
  • 自定义泛型方法
    • 格式: 修饰符 <> 返回值类型 方法名(参数列表){ 方法体 }
    • 泛型方法中泛型确定的时机:调用方法传入的类型就是泛型类型
      • public void show (T[ ] array) { }
  • 通配符以及受限泛型
    • <?>:一般使用方法,方法中的参数是一个集合,集合中的泛型为通配符
    • <?>:可以接收任意类型的泛型
      • 受限泛型
        • 泛型的下限 <? super 引用数据类型> :? 只能是此类型或者此类的父类型
        • 泛型的上限<? extends 引用数据类型> : ? 只能是此类型或者此类的子类型

★泛型不支持多态

数据结构:存储和组织数据的一种思想

  1. 栈:先进后出
  2. 队列:先进先出
  3. 数组:查询快,增删慢
  4. 链表:查询慢,增删快
  5. 树结构:
    1. 普通二叉树:每一个节点最多有两个子节点,查询速度比较低
    2. 二叉查找树:每一个节点的左子节点小,右子节点大,可以提高查询的速度,但是可能会出现长短腿
    3. 二叉平衡树:每个节点的左右子树高度差不超过1,如果添加元素破坏了平衡规则,那么会通过旋转保证再是一个平衡树
    4. 红黑树:红黑树不是高度平衡的,它的平衡是通过“红黑规则”进行实现的
      1. 规则如下:
        1. 每一个节点或是红色,或者是黑色的
        2. 根节点必须是黑色
        3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性为Nil,
  6. 哈希表结构:保证数据唯一

List集合
特点:

  1. 有序
  2. 有索引
  3. 元素可以重复

实现类:
ArrayList类:数组结构,查询快,增删慢
LinkedList类:双向链表,查询慢,增删快

Set集合
特点:

  1. 无序
  2. 无索引
  3. 元素唯一

实现类:
HashSet类:哈希表结构,可以保证元素唯一,要想保证元素唯一存储元素所在的类必须重写hashCode和equals方法
LinkedHashSet类:链表+哈希表,可以保证元素有序和唯一