集合二
一、泛型
1、概述
泛型JDK1.5引入的一种安全检测机制。就是一种对集合的约束,约束集合只能存入的数据类型。
- 好处:把运行时期的问题提前到了编译时期。
- 避免了强制类型转换
我们创建集合是可以不写泛型,但这样会给我们带来很多不麻烦与错误。像下面这样
没有泛型约束,那么这个集合的类型就是Object类型。可以存入任何数据类型的元素。但是当我们存入不同元素时,我们需要操作这个集合中的元素时,我们会发现该数据类型所提供的的方法我们不能使用。
ArrayList list = new ArrayList();
2、自定义泛型
1、定义格式:
1、单类型:尖括号任意书写,一般只写一个字母 E,T,Q
2、多类型:尖括号任意书写,一般只写一个字母<E,T,Q>
2、泛型类
修饰符 class 类名<类型>{}
public class Generic<T>{}
3、泛型方法
修饰符<类型> 返回值类型方法名(类型 变量名){}
public <T> void show(T t){}
<T> T[] toArray(T[] a) 返回指定类型的所有数组元素
3、泛型接口
修饰符 interface 接口名 <类型>{}
public interface Generic<T>{}
4、通配符
泛型通配符<?>相当于一个任何的类型。
二、Set集合
1、概述
Set是一个接口,实现类分别是HashSet和TreeSet
特点:无序,无索引,不重复 数据结构为:二叉树结构(下文有讲)。
使用方法基本与List相似,但因为Sete无索引,所以不能用索引获取元素,因此不能用普通for循环遍历集合元素。只有迭代器和增强for可用。
2、TreeSet集合
集合特点:
- 不包含重复元素的集合。
- 没有带索引的方法
- 可以将元素按照规则排序
- 红黑树结构
TreeSet<Object> set = new TreeSet<>();
3、TreeSet自然排序法
Comparable的使用
- 使用空参构造创建TreeSet集合
- 自定义的JavaBean类实现Comparable接口
- 重写里面的compareTo方法
- 根据返回值判断排序方式
返回值为负数存左边,返回值为0不存,返回值为正数存右边。
4、TreeSet比较器排序
- TreeSet的带参构造方法使用的是比较器排序对元素进行排序。
- 比较器排序是让集合构造方法接收Comparator的实现类对象,重写Compare(T o1,T o2)方法。
- 重写时,要注意排序规则按照主要条件和次要条件来写。
三、数据结构
1、二叉树
2、二叉查找树
3、平衡二叉树
左旋就是当二叉树不平衡右边长时向左边拉一位,父节点变为10,这样就又平衡了。右旋反之。
多个子节点时
左右,先左旋后在再整体右旋