Java7
- (一)、集合体系
- (二)、Collection
- (三)、Collection的遍历方式
- 3.1迭代器
- 3.2增强for遍历
- 3.3 Lambda表达式遍历
 
- (四)、List
- (五)、数据结构
- 5.1 栈
- 5.2 队列
- 5.3 数组
- 5.4 链表
- 5.5 树
- 5.6 红黑树
 
- (六)、泛型
 
(一)、集合体系
单列集合:每次添加一个数据
 双列集合:每次添加一对数据
集合体系结构:
 
List系列集合:添加的元素是有序、可重复、有索引
有序:存和取的顺序一致
可重复:集合中存储的元素可以重复
有索引: 可以通过索引获取所有元素
Set系列集合:添加的元素是无序、不重复、无索引的元素
(二)、Collection
Collection是单列集合的顶级接口,它的功能所有的单列集合都可以继承使用
常用方法:
 
 add的返回值:如果往List系列集合添加元素,那么返回值永远是true。如果往Set系列集合添加,如果数据不存在则返回true,反之则返回false
(三)、Collection的遍历方式
3.1迭代器
lterator类,是集合专用遍历方式,不依赖索引
 
 常用方法:
 
注意点:
 
 如果要第二次遍历,要获取一个新的迭代器对象
 如果当前位置没有元素,还要强行调用next,会报错NoSuchElementException
3.2增强for遍历
底层还是一个迭代器
 所有的单列集合和数组才能使用增强for遍历
格式:
 
 快速生成:集合的名字.for +回车
注意细节:
 修改增强for中的变量,不会改变集合中原本的数据
3.3 Lambda表达式遍历

 最简化方式:集合名.forEach(s ->sout(s));
(四)、List

 使用add时,如果原来索引的位置上有元素,这个元素会自动往后移
独有的遍历方式:
普通for循环:
 集合名.size 表示长度
 集合名.fori
 i表示索引,利用索引获取元素
列表迭代器:ListInterator
 额外添加了一个方法,在遍历过程中可以添加元素(用列表迭代器的add方法)
五种遍历方式对比:
 
(五)、数据结构
计算机底层存储、组织数据的方式
 8种数据结构:栈,队列,数组,链表,二叉树,二叉查找树,平衡二叉树,红黑树
5.1 栈
特点:后进先出,先进后出
 进入栈模型称为 :进/压栈
 离开栈模型称为 :弹/出栈
 
5.2 队列
特点:先进先出,后进后出
 从后端进入队列模型的过程称为:入队列
 从前端离开队列模型的过程称为:出队列
 
 后端进,前端出
5.3 数组
特点:
 查询速度快
 删除效率低
 添加效率极低
5.4 链表
分为单向链表和双向链表(结点包含前一个结点的地址)
链表中的结点都是一个独立的对象,在内存中是不连续的
 链表里的每个元素称为 :结点(数据,下个结点的地址)
特点:查询慢,不管查询什么都要从头开始
 增删比较快
5.5 树

 节点里有:父节点地址,值,左子节点地址,右子节点地址
 度:每一个节点的子节点数量
 树高:树的总层数
 根节点:最顶层的节点
 根节点的左右子树
二叉树:任意节点的度<=2
二叉查找树:
 
添加规则:大的存右边,小的存左边,一样的不存
 遍历方式:
 前序遍历:从根节点开始,按照当前节点,左子节点,右子节点的顺序遍历
 中序遍历:左子节点,当前节点,右子节点
 后序遍历:左,右,当前
 层序遍历:从跟节点开始,一层一层遍历
平衡二叉树:
 在二叉查找树上多一个规则:任意节点左右子树高度差不超过1
通过旋转机制保持平衡:当添加完节点不平衡时才会触发
左旋:确定支点(从添加的节点开始找,第一个不平衡的点)
示例1:
 

 示例2:
 
 
右旋:
示例1:
 
 
示例2:
 
 
四种触发旋转机制的情况:
 1.左左:当根节点左子树的左子树有节点插入,导致二叉树不平衡
 一次右旋
2.左右:根节点左子树的右子树有节点插入,导致二叉树不平衡
 局部左旋,一次右旋
3.右右:根节点右子树的右子树有节点插入
 一次左旋
4.右左:根节点右子树的左子树有节点插入
 局部右旋,一次左旋
5.6 红黑树
增删改查性能都很好
 自平衡的二叉查找树,每一个节点上都有储存位表示节点的颜色
 每一个节点可以是红或黑,它不是高度平衡的,它的平衡通过红黑规则实现
红黑规则:
 
 添加的节点默认是红色的
 调整方案:
 
(六)、泛型

 好处:
 
 Java中的泛型是伪泛型,只在编译时期有效
注:如果不写泛型,默认类型是object
 指定泛型类型后,传递数据时,可以传入该类类型或者其子类类型
 可以写在类后面,方法上面,接口后面
泛型类:当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类
 
泛型方法:方法中形参类型不确定时
 1.使用类名后面定义的泛型(所有方法都能使用)
 2.在方法声明上定义自己的泛型(只有本方法能使用)
 
泛型接口:
 
 使用方式1:实现类给出具体的类型
 使用方式2:实现类延续泛型,创建对象时再确定



















