JavaSE复习笔记
第十章 集合
一、集合的概述
-
集合的概念理解:存储数据的容器
-
集合与数组比较:
-
数组长度不可变;集合长度可变
-
数组的功能单一;集合提供了丰富的API功能,比如增删改查等
-
数组存储元素的特点单一,有序,可重复;各种集合存储元素有不同特点
-
数组可以存储基本数据类型和引用数据类型;集合只能存储引用数据类型。
-
-
集合框架体系
二、Collection接口
Collection表示一组对象,是一个顶层接口。
常用方法:
1、添加元素
(1)add(E obj):添加元素对象到当前集合中
(2)addAll(Collection<? extends E> other):添加other集合中的所有元素对象到当前集合中,即this = this ∪ other
2、删除元素
(1) boolean remove(Object obj) :从当前集合中删除第一个找到的与obj对象equals返回true的元素。
(2)boolean removeAll(Collection<?> coll):从当前集合中删除所有与coll集合中相同的元素。即this = this - this ∩ coll
3、判断
(1)boolean isEmpty():判断当前集合是否为空集合。
(2)boolean contains(Object obj):判断当前集合中是否存在一个与obj对象equals返回true的元素。
(3)boolean containsAll(Collection<?> c):判断c集合中的元素是否在当前集合中都存在。即c集合是否是当前集合的“子集”。
4、获取元素个数
(1)int size():获取当前集合中实际存储的元素个数
5、交集
(1)boolean retainAll(Collection<?> coll):当前集合仅保留与c集合中的元素相同的元素,即当前集合中仅保留两个集合的交集,即this = this ∩ coll;
6、转为数组
(1)Object[] toArray():返回包含当前集合中所有元素的数组
三、迭代器与增强for
-
Iterator迭代器用于遍历Collection集合
Collection<Integer> c = new ArrayList<>(); c.add(11); c.add(22); c.add(33); //获取迭代器 Iterator<Integer> it = c.iterator(); //调用迭代器的方法遍历集合 while(it.hasNext()){//判断是否有下一个元素 Integer i = it.next();//取出下一个元素,并向下移动指针 System.out.println(i); it.remove();//移除当前元素 }
-
增强foreach循环
格式:
for(元素的类型 变量 : 数组或集合){ 循环体 }
示例:
//遍历数组 int[] arr = {1,2,3}; for(int i : arr){ System.out.println(i); } //遍历集合 Collection<Integer> c = new ArrayList<>(); for(Integer i : c){ System.out.println(i); }
-
增强for与迭代器、Iterable接口的关系
增强for底层实际是使用Iterator迭代器实现的,实现了Iterable接口的类都可以使用迭代器遍历,也可以使用增强for遍历。
-
快速失败机制:
当使用迭代器遍历集合的同时,使用迭代器之外的方法来修改集合,会导致并发修改异常,这就是快速失败机制,目的是立即阻止这样的操作,因为可能导致最终数据的不准确等风险。
迭代器的快速失败机制借助集合的属性modCount来实现。
快速失败机制并不能得到保证,而是尽最大努力抛出异常。
四、List接口
-
List接口元素特点:
-
元素有序
-
元素可以重复
-
可以通过索引访问元素
-
-
List接口特有方法:
List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法。
1、添加元素
-
void add(int index, E ele)
-
boolean addAll(int index, Collection<? extends E> eles)
2、获取元素
-
E get(int index)
-
List subList(int fromIndex, int toIndex)
3、获取元素索引
-
int indexOf(Object obj)
-
int lastIndexOf(Object obj)
4、删除和替换元素
-
E remove(int index)
-
E set(int index, E ele)
-
-
List集合的遍历方式
-
迭代器遍历
-
增强for循环遍历
-
普通for循环遍历
-
五、ArrayList实现类
-
底层结构:数组
-
效率:查询快,增删慢
-
比较Vector:底层结构数组,线程安全,效率相对低,不推荐使用。