没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
http://hi.baidu.com/xiaolincc26/ihome ——疯狂大白菜
1 / 43
Java 集合排序及
集合排序及集合排序及
集合排序及 java 集合类详解
集合类详解集合类详解
集合类详解
(Collection,
Collection,Collection,
Collection,
List, Set, Map
List, Set, MapList, Set, Map
List, Set, Map)
摘 要 内 容
摘 要 内 容摘 要 内 容
摘 要 内 容
Java 里 面最 重 要 ,最 常用 也 就 是集 合 一 部 分了 。能 够 用好 集 合 和理
解 好 集 合 对于 做 Java 程 序 的 开 发 拥 有无 比 的好 处。 本 文详 细解 释 了关
于 Java 中 的 集合 是如 何 实现 的, 以 及他 们 的实 现原 理 。
关 键 字
关 键 字关 键 字
关 键 字 :
::
:
Collection , List ,Set , Map , 集 合, 框架 。
目
目目
目 录
录录
录
1 集 合 框 架
集 合 框 架集 合 框 架
集 合 框 架 ........................................................................................................................ 2
1.1 集 合 框 架 概 述
集 合 框 架 概 述集 合 框 架 概 述
集 合 框 架 概 述 .................................................................................................... 2
1.1.1 容 器 简 介
容 器 简 介容 器 简 介
容 器 简 介 ................................................................................................. 2
1.1.2 容 器 的 分 类
容 器 的 分 类容 器 的 分 类
容 器 的 分 类 ............................................................................................... 4
1.2 Collection ............................................................................................................ 7
1.2.1 常 用 方 法 ................................................................................................. 7
1.2.2 迭 代 器
迭 代 器迭 代 器
迭 代 器 ...................................................................................................... 9
1.3 List ...................................................................................................................... 11
1.3.1 概 述 ........................................................................................................... 11
1.3.2 常 用 方 法 ............................................................................................... 11
1.3.3 实 现 原 理
实 现 原 理实 现 原 理
实 现 原 理 ............................................................................................... 15
1.4 Map ..................................................................................................................... 18
1.4.1 概 述 ........................................................................................................... 18
1.4.2 常 用 方 法 ............................................................................................... 19
1.4.3 Comparable 接 口
接 口接 口
接 口 ................................................................................ 23
1.4.4 实 现 原 理
实 现 原 理实 现 原 理
实 现 原 理 ............................................................................................... 25
1.4.5 覆 写
覆 写覆 写
覆 写 hashCode().................................................................................... 29
1.5 Set .......................................................................................................................... 33
1.5.1 概 述 ........................................................................................................... 33
1.5.2 常 用 方 法 .................................................................................................. 34
1.5.3 实 现 原 理
实 现 原 理实 现 原 理
实 现 原 理 ............................................................................................... 38
1.6 总 结 :集 合 框 架 中 常 用 类 比 较 ........................................................................ 39
2 练 习 .................................................................................................................................. 40
3 附 录 : 排 序 .................................................................................................................... 41
http://hi.baidu.com/xiaolincc26/ihome ——疯狂大白菜
2 / 43
1
集合框架
集合框架集合框架
集合框架
1.1
集 合 框 架 概 述
集 合 框 架 概 述集 合 框 架 概 述
集 合 框 架 概 述
1.1.1
容 器简 介
容 器 简 介容 器 简 介
容 器 简 介
到 目 前 为 止, 我 们已 经 学习 了如 何 创建 多 个不 同的 对象 , 定义 了 这
些 对 象 以 后, 我 们就 可 以利 用它 们 来做 一 些有 意义 的事 情 。
举 例 来 说 ,假 设 要 存 储 许多 雇 员,不 同的 雇 员的 区别 仅 在于 雇员
的 身 份 证 号 。我 们 可以 通过 身 份证 号来 顺 序 存储 每个 雇 员,但 是在 内存
中 实 现 呢 ?是 不 是要 准 备足 够的 内 存来 存 储 1000 个 雇 员, 然后 再 将这
些 雇 员 逐 一插 入 ?如 果 已经 插入 了 500 条 记 录,这 时需 要 插入 一个 身 份
证 号 较 低 的新 雇 员,该 怎 么 办 呢 ? 是在 内 存中 将 500 条 记 录 全 部 下 移后 ,
再 从 开 头 插入 新 的记 录 ? 还 是 创建 一个 映 射 来记 住每 个 对象 的位 置 ?
当 决 定 如 何存 储 对象 的 集合 时, 必 须考 虑 如下 问题 。
对 于 对 象 集合 , 必须 执 行的 操作 主 要以 下 三种 :
添 加 新 的 对 象
删 除 对 象
查 找 对 象
我 们 必 须 确定 如 何将 新 的对 象添 加 到集 合 中。 可以 将对 象 添加 到 集
合 的 末 尾 、开 头 或者 中 间的 某个 逻 辑位 置 。
从 集 合 中 删除 一 个对 象 后, 对象 集 合中 现 有对 象会 有什 么 影响 呢 ?
可 能 必 须 将内 存 移来 移 去,或 者就 在 现有 对 象所 驻留 的 内存 位置 下 一个
“ 洞 ” 。
在 内 存 中 建立 对 象集 合 后,必 须确 定如 何 定 位特 定对 象 。可 建 立
一 种 机 制 ,利 用该 机 制可 根 据某 些搜 索 条 件( 例如 身份 证号 )直接 定位
到 目 标 对 象;否 则 ,便 需要 遍 历 集 合 中 的 每 个对 象,直 到 找 到 要 查找 的
对 象 为 止 。
前 面 大 家 已经 学 习过 了 数组 。数 组 的作 用 是可 以存 取一 组 数据 。
但 是 它 却 存在 一 些缺 点,使 得无 法 使用 它 来比 较方 便快 捷 的完 成 上述 应
用 场 景 的 要求 。
1.
首 先 ,在 很多 数 情况 下面 ,我 们 需要 能 够存 储一 组 数据 的容
器 ,这 一点 虽 然数 组可 以 实现 ,但 是如 果 我 们需 要存 储 的数 据
http://hi.baidu.com/xiaolincc26/ihome ——疯狂大白菜
3 / 43
的 个 数 多 少并 不 确定 。比 如说 :我 们需 要 在 容器 里面 存 储某 个
应 用 系 统 的当 前 的所 有 的在 线用 户 信息 ,而 当 前 的 在线 用 户信
息 是 时 刻 都可 能 在变 化 的。 也就 是说 , 我们 需要 一种 存 储数
据 的 容 器 ,它能 够自 动 的改 变 这 个 容 器 的 所 能 存 放 的数 据 数量
的 大 小 。这 一点 上 ,如 果 使用 数组 来 存储 的 话,就 显 得十 分 的
笨 拙 。
2.
我 们 再 假 设 这样 一 种场 景 :假 定一 个 购物 网站 ,经 过一 段 时
间 的 运 行 ,我 们已 经存 储 了一 系 列的 购物 清 单了 ,购 物 清单 中
有 商 品 信 息 。如 果 我 们 想 要知 道 这段 时 间 里面 有多 少种 商 品被
销 售 出 去 了 。那 么 我 们 就 需要 一 个容 器 能 够自 动的 过滤 掉 购物
清 单 中 的 关于 商 品的 重 复信 息。如 果使 用 数组 ,这 也 是很 难实
现 的 。
3.
最 后 再 想 想 ,我 们 经常 会 遇到 这种 情 况,我 知 道某 个人 的 帐
号 名 称 ,希 望 能够 进一 步 了解 这 个人 的其 他 的一 些信 息 。也 就
是 说 ,我 们 在一 个地 方 存放 一些 用 户信 息 ,我 们希 望 能够 通过
用 户 的 帐 号来 查 找到 对 应的 该用 户 的其 他 的一 些信 息 。再 举个
查 字 典 例 子 :假 设 我 们 希 望使 用 一个 容 器 来存 放单 词以 及 对于
这 个 单 词 的解 释 ,而 当 我们 想要 查 找某 个 单词 的意 思的 时 候,
能 够 根 据 提供 的 单词 在 这个 容器 中 找到 对 应的 单词 的解 释 。如
果 使 用 数 组来 实 现的 话 ,就 更加 的 困难 了 。
为 解 决 这 些问 题 ,Java 里面 就设 计 了容 器 集合 ,不 同 的容 器集 合 以
不 同 的 格 式保 存 对象 。
数 学 背 景
数 学 背 景数 学 背 景
数 学 背 景
在 常 见 用 法中 ,集 合( collection)和 数 学 上 直观 的集( set)的 概
念 是 相 同 的。 集 是一 个 唯一 项组 , 也就 是 说组 中没 有重 复 项。 实 际上 ,
“集 合框 架”包 含 了一 个 Set 接 口和 许多 具 体的 Set 类。 但正 式的 集
概 念 却 比 Java 技 术提 前了 一个 世纪 ,那时 英国 数学 家 George Boo
le 按逻 辑正 式的 定义 了集 的 概念 。 大部 分 人在 小学 时 通 过 我 们 熟 悉 的
维 恩 图 引 入的 “集的 交”和 “集 的 并 ”学 到 过 一 些 集 的理 论 。
http://hi.baidu.com/xiaolincc26/ihome ——疯狂大白菜
4 / 43
集 的 基 本 属性 如 下:
集 内 只 包 含 每 项的 一个 实 例
集 可 以 是 有 限 的, 也可 以 是无 限的
可 以 定 义 抽 象 概念
集 不 仅 是 逻辑 学 、数 学和 计 算机 科学 的 基 础, 对于 商业 和 系统 的日
常 应 用 来 说 ,它 也 很 实 用 。“连 接 池 ”这 一 概念 就 是 数 据 库 服 务 器 的 一个
开 放 连 接 集。 Web 服 务器 必 须管 理客 户 机 和连 接集 。 文件 描述 符 提供
了 操 作 系 统中 另 一个 集 的示 例。
映 射 是 一 种特 别 的集 。 它是 一种 对 (pair) 集, 每个 对 表示 一个 元
素 到 另 一 元素 的 单向 映 射。 一些 映 射示 例 有:
IP 地 址到 域名 (DNS)的 映 射
关 键 字 到 数 据 库记 录的 映 射
字 典 ( 词 到 含 义的 映射 )
2 进 制到 10 进制 转换 的映 射
就 像 集 一 样 ,映 射背 后 的思 想 比 Java 编程 语言 早的 多 ,甚至 比 计
算 机 科 学 还早 。 而 Java 中的 Map 就 是 映射 的一 种表 现 形式 。
1.1.2
容 器 的 分 类
容 器 的 分 类容 器 的 分 类
容 器 的 分 类
既 然 您 已 经具 备 了一 些 集的 理论 ,您 应 该 能够 更轻 松的 理 解“集 合 框
架 ”。 “集 合 框 架 ”由 一 组 用 来 操作 对 象的 接 口组 成。不 同 接口 描 述不 同
类 型 的 组 。在 很 大 程 度 上 ,一 旦您 理解 了 接 口,您 就 理 解 了框 架。虽 然
您 总 要 创 建接 口 特定 的 实现 ,但 访 问实 际 集合 的方 法应 该 限制 在 接口 方
法 的 使 用 上; 因 此, 允 许您 更改 基 本的 数 据结 构而 不必 改 变其 它 代码 。
框 架 接 口 层次 结 构如 下 图所 示。
Java 容 器类 类 库的 用 途 是“ 保 存 对 象 ” , 并将 其划 分为 两 个不 同 的
概 念 :
1)
Collection 。 一 组 对 立的 元 素,通 常 这 些 元素 都服 从 某种 规 则。
List 必 须保 持 元素 特定 的 顺 序 , 而 Set 不能 有重 复元 素 。
http://hi.baidu.com/xiaolincc26/ihome ——疯狂大白菜
5 / 43
2)
Map 。 一 组 成对 的“ 键值 对 ”对 象 。初 看起 来 这似 乎应 该 是
一 个 Collection , 其 元 素 是 成对 的对 象 , 但是 这样 的设 计 实现 起
来 太 笨 拙 了, 于 是我 们 将 Map 明 确 的提 取 出来 形成 一 个独 立的 概
念 。 另 一方 面 ,如 果 使用 Collection 表示 Map 的 部分 内 容,会 便
于 查 看 此 部分 内 容。 因 此 Map 一 样 容易 扩 展成 多维 Map , 无需
增 加 新 的 概念 ,只 要让 Map 中 的 键值 对 的每 个 “ 值 ” 也 是一 个 M
ap 即 可。
Collection 和 Map 的区 别 在于 容 器中 每个 位 置保 存的 元 素个 数。 Co
llection 每个 位置 只 能保 存一 个 元素 ( 对 象) 。此 类容 器 包括 : List ,
它 以 特 定 的顺 序 保存 一 组元 素; Set 则 是元 素不 能 重 复 。
Map 保 存 的是“键 值对 ”,就 像 一 个 小 型 数 据库 。我 们 可以 通 过“ 键”
找 到 该 键 对应 的 “值 ” 。
Collection – 对象 之间 没有 指定 的 顺序 ,允 许重 复 元素 。
Set – 对 象之 间没 有指 定的 顺 序, 不 允许 重复 元 素
List– 对 象 之间 有指 定的 顺序 , 允 许重 复元 素,并 引 入位 置
下 标 。
Map – 接口 用于 保存 关键 字( Key)和 数值( Value)的 集
合 ,集 合 中 的 每 个 对 象加 入 时都 提 供数 值 和关 键字 。Map 接 口
既 不 继 承 Set 也 不继 承 Collection。
List、 Set、 Map 共 同 的实 现 基础 是 Object 数 组
除 了 四 个 历史 集 合类 外 ,Java 2 框 架还 引入 了六 个集 合 实现 , 如
下 表 所 示 。
接口
接口接口
接口 实现
实现实现
实现 历史集合类
历史集合类历史集合类
历史集合类
Set HashSet
TreeSet
List ArrayList
Vector
LinkedList
Stack
Map HashMap Hashtable
TreeMap Properties
剩余42页未读,继续阅读
ertffbfs
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
- 基于matlab+DWT的图像水印项目,数字水印+源代码+文档说明+图片+报告pdf
- (优秀毕业设计)基于python实现的数字图像可视化水印系统的设计与实现,多种数字算法实现+源代码+文档说明+理论演示pdf
- 基于DWT-DCT-SVD和deflate压缩的数字水印方法python源码+Gui界面+演示视频(高分毕业设计)
- 基于matlab实现DWT、DCT、SVD算法数字图像水印可视化系统+GUI界面+文档说明+详细注释(高分毕业设计)
- NCIAE-Data-Structure大一大二笔记
- 学习wireshark笔记
- digital-image-数据可视化笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0