文章目录
集合
概述
用来存数据的容器
长度可变>取代数组的原因
只能存对象
集合只能临时存储数据不能永久存储
单列集合 Collection
双列集合Map
单列集合体系结构
单列集合
Collection
创建Collection<E>集合对象
Collection<E> 集合名 = new 具体的实现类对象<E>();
例如 :
Collection<E> 集合名 = new ArrayList<E>();
Collection<E> 集合名 = new HashSet<E>();
*boolean add(E e) : 添加元素,返回添加是否成功
删 :
*boolean remove(Object o) : 删除集合中指定元素,返回删除是否成功 -> 按元素值来删
void clear() : 清空集合中所有的元素
改 : Collection因为没有索引所以没有set方法
查 : Collection因为没有索引所以没有get方法
boolean contains(Object o) : 查询传入元素是否包含于集合中
boolean isEmpty() : 查询集合是否为空集合
* int size() : 查询集合中的元素个数/查询集合的长度
遍历方式:
1. 转数组
Object[] toArray()
2. 迭代器 -> 面向对象的遍历方式
Iterator iterator()
3. 增强for循环 (能用迭代器遍历的一定能用增强for)
迭代器 Iterator
boolean hasNext(): 查看容器中是否有下一个元素,如果有返回true
E next() : 拿到容器中的下一个元素
迭代器的使用步骤:
1. 获取迭代器对象 :
Iterator<E> it = 单列集合对象.iterator();
2. 循环操作 : 判断集合中是否有下一个元素
3. 如果有,拿到集合的这个元素; 以此往复,直到集合元素全部获取完毕
ConcurrentModificationException:并发修改异常
此异常只在迭代器中发生,触发的条件: 当使用迭代器对象遍历集合的时候,使用集合对象对原集合进行增删改操作都会出这个异常
解决方案:
1. 不修改
2. 使用列表迭代器(ListIterator)对象进行修改
触发时机 : 只要创建了迭代器对象,就不可以使用集合对象修改集合中的元素的内容!!
增强for循环
格式:
// : 后面 -> 要遍历的容器
// : 前面 -> 接收容器数据的变量
for(容器元素类型 变量名:集合对象/数组对象){
//对变量名进行操作 -> 变量接收的就是容器中的元素
}
底层: 增强for循环的底层是一个看不见的迭代器在操作
增强for只用来遍历集合/数组,不在在增强for循环中修改集合内容!!(不要再增强for中写复杂代码)
包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
包装类型有特性:
自动装箱 : 基本数据类型->引用数据类型
Integer i = 100;//Integer i = Integer.valueOf(100);
自动拆箱 : 引用数据类型->基本数据类型
int num = i;//int num = i.intValue();
List接口
List<E>接口 : 存取有序 , 元素有索引 , 元素能重复
创建List<E>集合对象
List<E>集合名 = new 具体的实现类对象<E>();
例如 :
List<E> 集合名 = new ArrayList<E>();
List<E> 集合名 = new HashSet<E>(); 错误
增删改查: //List接口中新增关于索引操作的方法
增 :
*boolean add(E e) : 依次添加元素,永远返回true
*void add(int index, E element) : 插入-> 在指定索引位置插入元素
删 :
*boolean remove(Object o) : 删除集合中指定元素,返回删除是否成功 -> 按元素值来删
void clear() : 清空集合中所有的元素
*E remove(int index) : 按照 索引删除指定索引位置的元素,并返回被删除的元素
改 :
E set(int index,E newElement): 修改指定索引位置的元素并返回被修改的元素
查 :
* E get(int index) : 获取指定索引位置的元素
boolean contains(Object o) : 查询传入元素是否包含于集合中
boolean isEmpty() : 查询集合是否为空集合
* int size() : 查询集合中的元素个数/查询集合的长度
int indexOf(Object o) : 获取传入的元素o第一次出现在集合的索引位置
int lastIndexOf(Object o) : 获取传入的元素o最后一次出现在集合的索引位置
遍历方式:
1. 转数组
Object[] toArray()
2. 迭代器 -> 面向对象的遍历方式
Iterator<E> iterator()
3. 增强for循环 (能用迭代器遍历的一定能用增强for)
4. 普通for循环 for循环 和 get(int index) 和 size()
5. 列表迭代器 ListIterator
ListIterator<E> listIterator()