每博一文案
《杀死一只知更鸟》中有这样一段话:“你永远不可能真正地了解一个人,除非你穿上他的鞋子走来走去,站在他的角度思考问题。
可真当你走过他的路时,你连路过都觉得难过。”
世上没有真正的感同身受,也永远不会有一模一样的境遇。
很多时候,你以为看到了全貌,但其实只有冰山一角。永远不要凭着一点蛛丝马迹,就随意评判别人的人生。
在你看不到的角落里,多的是你不知道的事。
不知别人的苦,就别劝人大度;没有经历过他人的难,就不要肆意嘲讽。
@
1. 集合简介
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties
这些类用来存储和操作对象组。
虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector
类的方式和使用 Properties
类的方式有着很大不同。
集合框架被设计成要满足以下几个目标。
- 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
- 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
- 对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。
集合也称为容器,仅仅是一个对象,多个元素组成一个单元。集合用于存储、检索、操作和聚合数据。 通常,他们标识形成自然组的数据项,例如扑克牌(牌集合),邮件文件夹(字母集合)。
1.1 集合和数组的区别:
数组:
- 数组初始化以后,长度就是确定了的,无法修改的,不便于扩展。
- 数组声明的类型,就决定了进行元素存储的类型了,仅仅只能存储一种数据类型。
- 数组中提供的属性和方法少,不便于进行添加,删除,插入等操作,且效率不高,同时无法直接获取存储元素的实际个数。
- 数组存储的数据是有序的,可以重复的,存储数据的特点单一 。
集合:
- 集合的长度是可变的,不足时,会自动扩容,便于扩展。
- 集合可以存储不同的类型(其实集合一般存储的也是同一种类型),实际上集合存储的是引用对象的地址值 。所以集合只能存储一种类型引用数据类型 ,不可以存储基本数据类型(可以存储包装类)。而数组既可以存储基本数据类型,也可以存储引用数据类型。
- 集合提供大量的属性和方法,便于添加,删除,插入,只能获取到集合中存储元素的实际个数 size()
- Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
2. 集合的使用场景
3. 集合框架概述
一个集合框架是用于表示和操作的集合统一架构。所有集合框架包含以下内容:
-
接口
这些是表示集合的抽象数据类型。接口允许独立于它们的表示的细节来操纵集合。在面向对象语言中,接口通常形成层次结构。
-
实现
这些是集合接口的具体实现。实质上,它们是可重用的数据结构。
-
算法
这些方法对实现集合接口的对象执行有用的计算,例如搜索和排序。算法被认为是多态的: 也就是说,相同的方法可以用于适当的收集接口的许多不同的实现。实质上,算法是可重用的功能。
Java集合可分为 Collection 和 Map 两种体系。
-
Collection 接口:单例数据,定义了存取一组对象的方法的集合。
- List : 元素有序,可重复的集合。具体的详细内容可以移步至:???????????? Java Collection 接口下的 “ List 集合” 与 “ Set 集合 ”_ChinaRainbowSea的博客-CSDN博客
- Set :元素无序,不可重复的集合。
- Map 接口:双列数据,保存具有映射关系 ”key-value对“ 的集合。具体的详细内容可以移步至:???????????? Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明_ChinaRainbowSea的博客-CSDN博客
Java集合的框架图:
4. Java 集合框架的好处
Java 集合框架提供了以下好处:
-
减少编程工作量:
通过提供有用的数据结构和算法,集合框架可以让您专注于程序的重要部分,而不是使其工作所需的低级“管道”。 通过促进不相关的 API 之间的互操作性,Java 集合框架免除了编写适配器对象或转换代码来连接 API。
-
提高程序速度和质量:
这个集合框架提供了有用的数据结构和算法的高性能,高质量的实现。每个接口的各种实现是可以互换的, 所以程序可以通过切换集合实现来轻松地进行调整。由于您已经摆脱了编写自己的数据结构的苦差事, 您将有更多时间致力于提高程序的质量和性能。
-
允许不相关的 API 之间的互操作性:
集合接口是 APIs 来回传递集合的本地语言。如果我的网络管理 API 提供了一个节点名称的集合, 并且如果您的 GUI 工具包期望一个列标题的集合,我们的 API 将无缝地互操作,即使它们是独立编写的。
-
减少了学习和使用新的 API 的努力:
许多 API 自然会将输入的集合作为输出提供。过去,每个这样的 API 都有一个小的子 API 来操纵它的集合。 这些专用集合的子 API 之间几乎没有一致性,所以你必须从头学习每一个,使用它们很容易犯错误。 随着标准集合接口的出现,问题就消失了。
-
减少设计新 API 的工作量:
这是以前优势的另一面。设计师和实施者不必在每次创建依赖于集合的 API 时重新发明*; 相反,他们可以使用标准的集合接口。
-
促进软件重用:
符合标准集合接口的新数据结构本质上是可重用的。对于在实现这些接口的对象上运行的新算法也是如此。
5. 实现
实现是用于存储集合的数据对象,本课介绍以下几种实现:
- 通用实现 :是最常用的实现,专为日常使用而设计。他们在标题为“通用目的实现”的表中进行了总结。
- 特殊实现:专为在特殊情况下使用而设计,并显示非标准性能特性,使用限制或行为
-
并发实现 :支持高并发,通常以牺牲单线程性能为代价。这些实现是
java.util.concurrent
软件包中的一部分 - 封装器实现 : 与其他类型的实现(通常是通用实现)结合使用,以提供增加或现在的功能
- 方便实现 : 也就是小型实现,通常通过静态工厂方法提供,为特殊集合(例如单例集)的通用实现提供方便,高效的替代
- 抽象实现 : 便于构建定制实现的骨架实现。稍后在“自定义集合的实现”中进行介绍。一个高级的话题,这不是特别困难,但相对少的人需要做。
通用实现被总结在下表
接口 | 哈希表 | 可变数组 | 平衡二叉树 | 链表 | 哈希表+链表 |
---|---|---|---|---|---|
Set | HashSet | - | TreeSet | - | LinkedHashSet |
List | - | ArrayList | - | LinkedList | - |
Deque | - | ArrayDeque | - | LinkedList | - |
Map | HashMap | - | TreeMap | - | LinkedHashMap |
Queue | - | - | - | - | - |
正如你可以从表中看到,Java 集合框架提供了几种通用的实现 Set, List 以及 Map。
6. 最后:
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!!!