1 集合概述
集合是ava中存储对象数据的一种容器。
- 注意:集合中只能存储引用类型数据,如果要存储基本类型数据可以选用包装类。
- 集合适合的场景:数据的个数不确定,需要进行增删元素的时候。
2Collection集合的体系特点
各种集合的关系:
小结:
1、集合的代表是?
Collection接口(集合的祖宗接口)
2、Collection集合分了哪2大常用的集合体系?
- Lst系列集合:添加的元素是有序、可重复、有索引。
- Set系列集合:添加的元素是无序、不重复、无索引。
3、如何约定集合存储数据的类型,需要注意什么?
- 集合支持泛型。
- 集合和泛型不支持基本类型,只支持引用数据类型。
3 Collection集合常用API
- 两个集合合并的方法a'd'dAll()
4 Collection集合的遍历方式(不支持索引)
-
方式一:迭代器
- 遍历就是一个一个的把容器中的元素访问一遍。
- 迭代器在到ava中的代表是Iterator,迭代器是集合的专用遍历方式。
Collection<String> lists = new ArrayList<>();
lists.add("赵敏");
lists,add("小昭");
lists,add("素素");
lists,add("灭绝");
System.out.println(lists);
//[赵敏,小昭,素素,灭绝]
//1、得到当前集合的选代器对象。
Iterator<String> it = lists.iterator();
String ele = it.next();
//iterator.next:先取值后移位
System.out.println(ele);
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
//2、定义while循环
while (it.hasNext()){
String ele it.next();
System.out.println(ele);
}
-
方式二:foreach/增强for循环
- 增强fo循环:既可以遍历集合也可以遍历数组。
- 它是JDK5之后出现的,其内部原理是一个terator迭代器,遍历集合相当于是迭代器的简化写法。
- 实现Iterable接口的类才可以使用迭代器和增强for, Collection:接口已经实现了Iterable接口。
public class CollectionDemo02{
public static void main(String[] args){
Collection<String>lists new ArrayList<>();
lists,add("赵做");
lists.add("小昭");
lists,add("股素素"):
lists.add("周芷若"):
System.out.println(lists);
//[赵做,小昭,股素素,周芷若]
for (String ele : lists){
System.out.println(ele);
}
}
}
-
方式三:lambda表达式
Lambda表达式遍历集合
- 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
Collection结合Lambda遍历的API:
代码简化例子:
5 Collection集合存储自定义类型的对象
案例代码:
内存原理:
6 常见数据结构(略)
数据结构概述、栈、队列
数组
链表
二叉树、二叉查找树
平衡二叉树
红黑树
7 List系列集合
8 补充知识:集合的并发修改异常问题
9 补充知识:泛型深入
10补充知识:红黑树
红黑树是一种自平衡的二叉查找树,是计算机科学中的一种数据结构。
添加节点:
- 添加的节点的颜色,可以是红色的,也可以是黑色的。
- 默认用红色效率高。
规则如下:
- 每一个节点或是红色的,或者是黑色的,根节点必须是黑色
- 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nl,这些N视为叶节点,每个叶节点(Nil)是黑色的:
- 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
- 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。
红黑树增删改查的性能都很好
11 不可变集合
不可变集合的特点?
- 定义完成后不可以修改,或者添加、删除
如何创建不可变集合?
- List、Set、Map接口中,都存在of方法可以创建不可变集合。
代码示例: