##一 Collection集合
### 01 集合体系结构
a:Collection 集合(单身汉集合)
|_ List
|_ ArrayList(重点掌握)
|_ LinkedList
|_ Set
|_ HashSet(重点掌握)
|_ LinkedHashSet
|_ TreeSet
b:Map集合(夫妻对集合)
|_ HashMap(重点掌握)
|_ LinkedHashMap
|_ Hashtable
|_ Properties(重点掌握)
##02.Collection集合概述和基本使用
总结:
* Collection集合概述
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
有的集合可以存储重复的元素
有的集合不可以存储重复的元素
有的集合是有索引的
有的集合是没有索引的
有的集合是有序的
有的集合是没有顺序的
* Collection集合基本使用
Collection col = new ArrayList<>();
##03 Collection集合的常用方法【应用】
* boolean add(E e) 添加元素 永远返回的都是true 可以添加重复的内容
* boolean remove(Object o) 从集合中移除指定的元素
* void clear() 清空集合中的元素
* boolean contains(Object o)判断集合中是否存在指定的元素
* boolean isEmpty() 判断集合是否为空
* int size() 集合的长度,也就是集合中元素的个数
##04 Collection集合的遍历
* 迭代器的介绍
迭代器,集合的专用遍历方式
Iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
迭代器是通过集合的iterator():方法得到的,所以我们说它是依赖于集合而存在的
* Collection集合的遍历
##05 集合使用步骤图解
第一步: 创建集合(该如何选择集合)
第二步: 添加元素
* 创建元素
* 将元素添加到集合中
第三步: 遍历集合
* 迭代器
* 获取迭代器
* 使用hasNext() 方法判断是否有元素
* 使用next() 方法来获取元素
* 增强for
* 普通for
## 06 集合的案例
* 案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
* 案例代码:
// 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
public class CollectionTest01 {
public static void main(String[] args) {
// 定义学生Student类
// 创建集合
// ArrayList list = new ArrayList<>();
Collection list = new ArrayList<>();
// 创建三个学生对象
Student stu1 = new Student("张三", 13);
Student stu2 = new Student("李四", 14);
Student stu3 = new Student("王五", 15);
// 将三个学生对象添加到集合中
list.add(stu1);
list.add(stu2);
list.add(stu3);
// 遍历集合 使用迭代器
Iterator it = list.iterator();
while (it.hasNext()) {
Student stu = it.next();
System.out.println(stu);
}
}
}
## 二.List集合
## 06 List集合概述和特点
总结:
* List集合特点
* 允许存储重复的元素
* 有序的(存储元素的顺序和取出元素的顺序是一致的)
* 索引的
## 07 List(ArrayList)集合的特有方法【应用】
* void add(int index,E element) 在此集合中的指定位置插入指定的元素
* E remove(int index) 删除指定索引处的元素,返回被删除的元素
* E set(int index,E element) 修改指定索引处的元素,`返回被修改的元素
* E get(int index) 返回指定索引处的元素
## 08 List集合的案例
* 案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
* 案例代码:
// 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
public class ListTest01 {
public static void main(String[] args) {
// 定义学生Student类
// 创建集合
// ArrayList list = new ArrayList<>();
// Collection list = new ArrayList<>();
List list = new ArrayList<>();
// 创建三个学生对象
// Student stu1 = new Student("张三", 13);
// Student stu2 = new Student("李四", 14);
// Student stu3 = new Student("王五", 15);
// 将三个学生对象添加到集合中
list.add(new Student("张三", 13));
list.add(new Student("李四", 14));
list.add(new Student("王五", 15));
// 遍历集合 使用迭代器
Iterator it = list.iterator();
while (it.hasNext()) {
Student stu = it.next();
System.out.println(stu);
}
System.out.println("~~~~~~~~~~~~~~~~~~~~~");
// 使用普通for循环遍历
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu);
}
}
}
## 09 并发修改异常(了解出现的原因)
总结:
* 出现的原因
预期修改的值跟实际修改的值不相符,就会报并发修改异常 ConcurrentModificationException
* 解决的方案
* 使用for循环
* 不使用迭代器就不会出现这个问题
* 使用Iterator有一个子接口ListIterator
使用迭代器最常见一种方式就是 遍历集合
## 10 列表迭代器(了解)
* ListIterator 介绍
通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
## 11 增强for循环
* 增强for作用
方便遍历数组/集合
* 增强for格式
for (元素的类型 变量名 : 数组/集合对象 ) {
打印元素
}
底层也是使用迭代器来实现的,也就说,我们使用增强for循环,也不能在遍历的是,进行操作集合中的元素
## 12 集合的案例
* List集合存储学生对象三种方式遍历【应用】
* 案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
##三.数据结构
总结:
* A:栈
* 特点: 先进后出
举例: 弹夹
* B:队列
* 特点: 先进先出
举例: 排队安检
* C:数组
* 特点: 查询快 增删慢
* D:链表
* 特点: 查询慢 增删快
链表元素成为结点: 地址 元素 下一个地址
E: 查询快 增删快
哈希表(数组 + 链表 + 链表 + 红黑树)
## 13 List集合子类的特点
* ArrayList集合
* 底层数据结构: 数组
* 特点: 查询快 增删慢
* LinkedList 集合
* 底层数据结构:链表
* 特点: 查询慢 增删快
## 14 集合的案例
ArrayList集合存储学生对象三种方式遍历【应用】
* 案例需求
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
## 14 LinkedList 集合的特有功能【应用】
* 特有方法
* public void addFirst(E e)在该列表开头插入指定的元素
* public void addLast(E e) 将指定的元素追加到此列表的末尾
* public E getFirst() 返回此列表中的第一个元素
* public E getLast() 返回此列表中的最后一个元素
* public E removeFirst() 从此列表中删除并返回第一个元素
* public E removeLast() 从此列表中删除并返回最后一个元素
public class LinkedListDemo02 {
public static void main(String[] args) {
// 创建LinkedList集合对象
LinkedList list = new LinkedList<>();
list.add("you");
list.add("wo");
list.add("ta");
list.add("tata");
// public void addFirst(E e)在该列表开头插入指定的元素
// public void addLast(E e) 将指定的元素追加到此列表的末尾
list.addFirst("tamen");
list.addLast("women");
// public E getFirst() 返回此列表中的第一个元素
// public E getLast() 返回此列表中的最后一个元素
System.out.println(list.getFirst());
System.out.println(list.getLast());
// public E removeFirst() 从此列表中删除并返回第一个元素
// public E removeLast() 从此列表中删除并返回最后一个元素
list.removeFirst();
list.removeLast();
System.out.println(list);
}
}