集合概述
生活中的集合:人或事物聚集在一起。
数学中的集合:具有某种特性的事物的整体。
Java中的集合:是工具类,可以存储任意数量的具有共同属性的对象
Java集合中只能存放对象的引用,不能存放基本类型数据
集合与数组
数组的缺陷:长度必须确定且不能改变,类型固定,算法需自己实现
而集合的长度是可以动态改变的,集合允许存储不同类型的对象,集合对外提供了很多算法实现。
用数组去满足存储固定长度的数据场景,比如存储20名学生的信息;而集合更适用于动态变化的场景,比如存储购物车的商品信息。
应用场景
- 无法预测存储数量的数据
- 同时存储具有一对一关系的数据(键值对)
- 需要进行数据的增删
- 数据重复问题
- ……
集合框架
为了表示和操作集合而规定的一种统一的标准体系结构。
分类
- 单列集合Collection
— List:元素有序、可包含重复元素
— Set:元素无序、不包含重复元素 - 双列集合Map:键值映射关系
- 迭代器Iterator
- 比较接口Comparable与Comparator
主要组成
- 对外的接口
表示集合的抽象数据类型,提供了让我们对集合中所表示的内容进行单独操作的可能 - 接口的实现
实际上就是那些可复用的数据结构 - 对集合运算的算法
这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现
使用集合框架的好处
- 减少了程序设计的辛劳
- 提高了程序速度和质量
- 减少学习和使用新的API的辛劳
- 减少了设计新API的努力
- 集合框架鼓励软件的复用
集合框架的体系结构
Collection接口
用于表示任何对象或元素组,集合框架的顶层接口,想要尽可能以常规方式处理一组元素时,就使用该接口
常用方法
Iterator接口
用于对集合容器进行向前的单方向遍历,通常称为迭代器。该接口的实例也是容器。在返回的迭代器这个容器中,已经将集合中的内容复制了一份。
常用方法
遍历集合
//创建集合
List list = new ArrayList();
//添加元素
list.add(1);list.add(2);list.add(3);
//获取迭代器对象进行遍历
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
Comparable接口
此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,该类有方法可以定义比较规则,该方法被称为它的自然比较方法。
方法:int compareTo(T o)
定义比较顺序
返回值:如果调用方法的对象小于指定对象,则返回负整数,大于则返回正整数,等于则返回0
List接口
List是元素有序并且可以重复的集合,称为序列,顺序性是List最重要的特性。
List可以精确的控制每个元素的插入位置,或删除某个位置的元素。
List的两个主要实现类是ArrayList
和LinkedList
特有方法
ListIterator接口
list特有的迭代器,内含避免并发修改异常的算法。
并发修改异常
并发修改异常,java.util.ConcurrentModificationException
如果在迭代集合的过程中,使用集合本身添加或删除元素,则会产生该异常。
//创建集合
List list = new ArrayList();
//添加元素
list.add(1);list.add(2);list.add(3);
//遍历
Iterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
//在迭代的过程中使用集合本身添加/删除元素,抛出异常ConcurrentModificationException
//list.remove(0);
list.add(4);
}
特有方法
除了迭代器的hasNext()
、next()
、remove()
方法,还包含以下方法
使用列表迭代器解决并发修改问题
//创建集合
List list = new ArrayList();
//添加元素
list.add(1);list.add(2);list.add(3);
//使用列表迭代器
ListIterator iterator = list.listIterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
//使用迭代器的添加方法进行添加元素
iterator.add(4);
}
System.out.println(list);
//[1, 4, 2, 4, 3, 4]
网友评论