说到Java集合框架我们首先要介绍集合的概念。集合理论是现代数学中重要的基础理论。计算机科学作为一门现代科学,其中许多概念也来自数学,集合就是其中之一。集合可以看作是存储对象信息的容器。我们都知道数组可以用来存储多个数据或对象,为什么Java中还有List,Map,像set这样的集合类?说明数组有一定的局限性,比如数组长度是固定的,不能自动生长。在这种情况下,集合应运而生。
Java集合框架(Java Collections Framework,JCF)它是一种统一的标准体系结构,用于表示和操作集合。任何集合框架都包括三个部分:外部接口、接口的实现和集合操作算法。
算法:一些有用的计算,如搜索和排序,以实现集合接口对象中的方法。这些算法被称为多态,因为相同的方法可以在相似的接口上实现不同的方法。
- 接口
接口是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等等。定义多个接口的原因是以不同的方式操作集合对象。Java中的集合类可分为两类:一类是实现Collection接口;另一类是实现Map接口。Collection是一个基本的集合接口,可以在Collection中容纳一组集合元素(Element)。Map没有继承Colection接口,与Collection并列。Map提供键(key)到值(value)的映射。Map中不能包含相同的键,每个键只能映射一个值。
从上图可以看出Set,Queue,List都实现了Collection的连接口。Collection是集合框架中顶层的基本接口, 提供数据集的基本描述, 其直接实现类没有在官方API中提供, 相反,在此基础上提供了进一步的限制接口, 即List, Set, Queue,这实现了最大的通用性。Collection提供了数据操作的基本方法, 如addd(), remove(), size(), clear()等; 同时, 它还继承了Iterable接口, 该接口用于使用迭代器遍历集合, 使用迭代器遍历集合的优点是我们不需要知道集合的内部结果,集合的内部结构和状态由Iterator维持,hasnext()采用统一的方法, next()判断和获取下一个元素。
- 实现(类)
实现是指接口的实现类,这是集合接口的具体实现。本质上,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。很好地列出了通常关键使用的实现类别。以下表格列出了几个关键的实现类别:
三、算法
算法是指以以Collections为主的一系列集合操作, 参见下图, 列出了它提供的常用算法:
以下是对上述方法的简要解释:
1.sort(List): 使用归并排序, 确保NlogN的时间复杂性和稳定性
2.binarySearch(List, Object): 在有序的List中使用二分搜索
3.reverse(List): 逆转List
4.shuffle(List): 随机重新排列List中的元素
5.fill(List, Object): 使用指定值(Object)在List中覆盖所有元素
6.copy(List dest, List src): 拷贝
7.min(Collection): 返回最小值
8.max(Collection): 返回最大值
9.rotate(List list, int distance): 将List中的元素旋转指定distancee
10.replaceAll(List list, Object oldVal, Object newVal): 用newval替换List中出现的所有oldval
11.indexOfSubList(List source, List target): 返回source中与target匹配的第一个子项的首要元素索引
12.lastIndexOfSubList(List source, List target): 返回最后一个匹配子项的首要元素索引
13.swap(List, int, int): 交换指定位置的两个元素
14.frequency(Collection, Object): 找出指定元素的出现次数
15.disjoint(Collection, Collection): 判断两个集合是否包含相同的元素(即集合是否相交)
16.addAll(Collection, T...): 将指定元素添加到指定的集合中
集合框架的优点:
1.通过提供有用的数据结构和算法,集合框架允许您专注于程序的重要组成部分,而不是使程序正常运行。通过这些API之间的简单互用性使您免除了为改编对象或转换代码,以便与这些API结合编写大量代码。
2.通过提供有用的数据结构和算法的高性能和高质量的实现,集合框架可以提高您的程序速度和质量。由于每个接口的实现是可交换的,您的程序可以通过改变一个实现轻松调整。此外,您还可以摆脱写自己数据结构的痛苦,从而有更多的时间关注程序其他部分的质量和性能。
3.许多API自然存储和获取集合。在过去,这样的API有一些子API来帮助操作其集合内容,所以这些特殊的子API之间会缺乏一致性,你必须从零开始学习,在使用时很容易犯错误。标准集合框架接口的出现解决了这个问题。
Java集合框架拥有了这些优点,只要我们合理地使用它,它就会成为我们手中的得力工具,帮助我们在工作中完成任务。如果工人想做好事,他们必须首先利用他们的工具。只有牢牢掌握java集合框架,我们可以写出更好、更高效的程序。