泛型
概述
-
优点
可以在编译时期对类型做检测,避免了 类型转换异常
- 泛型在运行过程中会被擦除
泛型名就是一个大写的英文字母,如果有多个泛型,那么使用逗号分隔
自定义泛型类
- 修饰符 class 类名 <>{ }
- 泛型类中的泛型确定时机:
- 创建一个类的对象
- 自定义泛型接口
- 修饰符 interface 接口名<泛型名>{ }
- 泛型接口中的泛型确定时机:
- 当一个实现类,实现接口时,确定泛型
- class MyList implements MyCollection
{ }
- class MyList implements MyCollection
- 当一个实现类,实现接口时,不确定接口的泛型类型,那么回到泛型类的使用
- class MyList
implements MyCollection { }
- class MyList
- 当一个实现类,实现接口时,确定泛型
- 自定义泛型方法
- 格式: 修饰符 <> 返回值类型 方法名(参数列表){ 方法体 }
- 泛型方法中泛型确定的时机:调用方法传入的类型就是泛型类型
- public
void show (T[ ] array) { }
- public
- 通配符以及受限泛型
- <?>:一般使用方法,方法中的参数是一个集合,集合中的泛型为通配符
- <?>:可以接收任意类型的泛型
- 受限泛型
- 泛型的下限 <? super 引用数据类型> :? 只能是此类型或者此类的父类型
- 泛型的上限<? extends 引用数据类型> : ? 只能是此类型或者此类的子类型
- 受限泛型
★泛型不支持多态
数据结构:存储和组织数据的一种思想
- 栈:先进后出
- 队列:先进先出
- 数组:查询快,增删慢
- 链表:查询慢,增删快
- 树结构:
- 普通二叉树:每一个节点最多有两个子节点,查询速度比较低
- 二叉查找树:每一个节点的左子节点小,右子节点大,可以提高查询的速度,但是可能会出现长短腿
- 二叉平衡树:每个节点的左右子树高度差不超过1,如果添加元素破坏了平衡规则,那么会通过旋转保证再是一个平衡树
- 红黑树:红黑树不是高度平衡的,它的平衡是通过“红黑规则”进行实现的
- 规则如下:
- 每一个节点或是红色,或者是黑色的
- 根节点必须是黑色
- 如果一个节点没有子节点或者父节点,则该节点相应的指针属性为Nil,
- 规则如下:
- 哈希表结构:保证数据唯一
List集合
特点:
- 有序
- 有索引
- 元素可以重复
实现类:
ArrayList类:数组结构,查询快,增删慢
LinkedList类:双向链表,查询慢,增删快
Set集合
特点:
- 无序
- 无索引
- 元素唯一
实现类:
HashSet类:哈希表结构,可以保证元素唯一,要想保证元素唯一存储元素所在的类必须重写hashCode和equals方法
LinkedHashSet类:链表+哈希表,可以保证元素有序和唯一