概述
集合是java存储对象数据的一种容器;
特点
1. 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定;
2. 集合非常适合做元素的增删操作。
注意 : 集合中只能存储引用类型数据,如果要存储基本类型数据可以选用包装类;
集合类体系结构
1. Collection 单列集合,每个元素(数据)只包含一个值;
2. Map 双列集合,每个元素包含两个值(键值对);
Collection (接口)集合体系
1. List (接口)-> ArrayList\LinkedList (实现类);
特点:有序、可重复、有索引。
2. set (接口) -> TreeSet\HashSet -> LinkeHashSet (实现类);
特点: 无序、不重复、无索引。
HashSet: 无序、不重复、无索引,LinkeHashSet:有序、不重复、无索引。
TreeSet :按照大小默认升序排序、不重复、无索引。
集合对泛型的支持
集合都是支持泛型的,可以在编译阶段约束集合元素类型。
Collection 常用Api
add() 添加,添加成功返回true
clear() 清空集合元素
isEmpty() 判断是否为空
size() 获取集合大小
contains() 判断是否包含某元素
remove() 删除元素值,默认删除前面第一个元素 。
toArray() 集合转成数组
addAll() 将一个集合合并到另一个集合 。
Collection 遍历方式
迭代器遍历
遍历就是一个一个的把容器中的元素访问一遍
迭代器在Java中的代表式Iterator,迭代器是集合的专用遍历方式。
1. Iterator iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引;
2. Iterator中的常用方法
boolean hasNext() 询问当前位置是否有元素存在,
E next() 获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。
Collection<String> list = new ArrayList();
list.add("java"); list.add("Mybatis");
list.add("SSM");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
增强for循环
1.增强for循环:即可以遍历集合也可以遍历数组。
2. 它是JDK5 之后出现的,其内部原理就是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。
3. 实现Iterable接口的类才可以使用迭代器和增强for,Collection接口实现了Iterable接口;
for(元素数据类型 变量名: 数组或集合) {
// 此处使用变量即可,该变量就是当前元素
}
Lambda 表达式
得益于JDK 8 开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
Collection 结合Lambda遍历API > default void forEach(Consumer<? super T> action)
Collection<String> list = new ArrayList();
list.add("java");
list.add("Mybatis");
list.add("SSM");
list.forEach(s -> System.out.println(s));
list.forEach( System.out:print);
常见数据结构学习
数据结构概述
数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。
通常情况下,精心选择的数据结构可以带来更高的运行或着存储效率。
常见数据结构
栈 : 后进先出,先进后出 。
压/进栈 : 数据进入栈模型的过程。
弹/出栈 : 数据离开栈模型的过程。
队列 : 先进先出,后进后出。
入队列 : 数据从后端进入队列模型的过程。
出队列 : 数据从前端离开队列模型的过程 。
数组
优点 : 查询数据通过地址值和索引定位,查询任意数据耗时相同(元素在内存中是连续存储的)
缺点:删除效率低:要将原始数据删除,同时后面每个数据前移。
链表 :
链表中的元素是在内存中不连续存储的,每个元素节点包含数据值和下一个元素地址。
链表查询慢,无论查询哪个数据都要从头开始找;
增删相对快。
二叉树
只有一个根节点,每个节点最多支持两个直接子节点;
节点的度 ,节点拥有的子数的个数,二叉树的度不大于2叶子节点度为0的节点也称为终端节点。
高度: 叶子节点的高度为1,叶子节点的父节点高度为2,以此类推,根节点的高度最高。
层,根节点在第一层,以此类推 。
兄弟节点,拥有共同父节点的节点互称为兄弟节点。
二叉查找树
又称二叉排序树/二叉搜索树 。
1. 每一个节点上最多两个子节点;
2. 左子树上所有的节点值都小于根节点的值;
3. 右子树上所有节点的值都大于根节点的值。
平衡二叉树
在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高查数据的性能。
在添加元素后可能导致不平衡:
基本策略是进行左旋,或者右旋。
旋转的4中情况 : 左左、左右、右左、右右。
红黑树
是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构。
1972年出现,当时被称为平衡二叉B树,1978被修改为“红黑树”
每一个节点可以是红或者黑,红黑树不是通过高度平衡的它的平衡是通过红黑规则 进行实现的。
红黑规则
1. 每一个节点或是红色的,或者是黑色的,根节点必须是黑色 ;
2. 如果一个节点没有子节点。或父节点,则该节点相应的指针属性值为nil,这些nil视为叶节点,是黑色的。
3. 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况) 。
4. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数据的黑色节点。
添加节点 :
添加的节点的颜色,可以是红色,也可以是黑色
默认用红色效率高 。