Java集合Collection、List、Set、Map使用详解

上传人:mg****2 文档编号:123221574 上传时间:2020-03-08 格式:DOC 页数:55 大小:305KB
返回 下载 相关 举报
Java集合Collection、List、Set、Map使用详解_第1页
第1页 / 共55页
Java集合Collection、List、Set、Map使用详解_第2页
第2页 / 共55页
Java集合Collection、List、Set、Map使用详解_第3页
第3页 / 共55页
Java集合Collection、List、Set、Map使用详解_第4页
第4页 / 共55页
Java集合Collection、List、Set、Map使用详解_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《Java集合Collection、List、Set、Map使用详解》由会员分享,可在线阅读,更多相关《Java集合Collection、List、Set、Map使用详解(55页珍藏版)》请在金锄头文库上搜索。

1、 JavaJava 集合排序及集合排序及 javajava 集合类详解集合类详解 C Co ol ll le ec ct ti io on n L Li is st t S Se et t M Ma ap p 摘摘要要内内容容 集合是 Java 里面最常用的 也是最重要的一部分 能够用好集合和 理解好集合对于做Java 程序的开发拥有无比的好处 本文详细解释了关 于 Java 中的集合是如何实现的 以及他们的实现原理 目目 录录 1 1 集集合合框框架架 2 1 1 1 1 集集合合框框架架概概述述 2 1 1 1 1 1 1 容容器器简简介介 2 1 1 1 1 2 2 容容器器的的分分类类

2、 5 1 2 Collection 6 1 2 1 常用方法 6 1 1 2 2 2 2 迭迭代代器器 9 1 3 List 11 1 3 1 概述 11 1 3 2 常用方法 12 1 1 3 3 3 3 实实现现原原理理 17 1 4 Map 20 1 4 1 概述 20 1 4 2 常用方法 21 1 1 4 4 3 3 C Co om mp pa ar ra ab bl le e 接接口口 27 1 1 4 4 4 4 实实现现原原理理 29 1 1 4 4 5 5 覆覆写写 h ha as sh hC Co od de e 34 1 5 Set 39 1 5 1 概述 39 1 5

3、2 常用方法 39 1 1 5 5 3 3 实实现现原原理理 45 1 6 总结 集合框架中常用类比较 46 2 练习 47 3 附录 排序 48 1 1 集集合合框框架架 1 1 1 1 集集合合框框架架概概述述 1 1 1 1 1 1 容容器器简简介介 到目前为止 我们已经学习了如何创建多个不同的对象 定义了这些 对象以后 我们就可以利用它们来做一些有意义的事情 举例来说 假设要存储许多雇员 不同的雇员的区别仅在于雇员的 身份证号 我们可以通过身份证号来顺序存储每个雇员 但是在内存中实 现呢 是不是要准备足够的内存来存储1000 个雇员 然后再将这些雇 员逐一插入 如果已经插入了500 条

4、记录 这时需要插入一个身份证号 较低的新雇员 该怎么办呢 是在内存中将500 条记录全部下移后 再 从开头插入新的记录 还是创建一个映射来记住每个对象的位置 当决 定如何存储对象的集合时 必须考虑如下问题 对于对象集合 必须执行的操作主要以下三种 添加新的对象 删除对象 查找对象 我们必须确定如何将新的对象添加到集合中 可以将对象添加到集合的 末尾 开头或者中间的某个逻辑位置 从集合中删除一个对象后 对象集合中现有对象会有什么影响呢 可能 必须将内存移来移去 或者就在现有对象所驻留的内存位置下一个 洞 在内存中建立对象集合后 必须确定如何定位特定对象 可建立一 种机制 利用该机制可根据某些搜索

5、条件 例如身份证号 直接定位到目 标对象 否则 便需要遍历集合中的每个对象 直到找到要查找的对象为 止 前面大家已经学习过了数组 数组的作用是可以存取一组数据 但 是它却存在一些缺点 使得无法使用它来比较方便快捷的完成上述应用场 景的要求 1 首先 在很多数情况下面 我们需要能够存储一组数据的 容器 这一点虽然数组可以实现 但是如果我们需要存储的数据 的个数多少并不确定 比如说 我们需要在容器里面存储某个应 用系统的当前的所有的在线用户信息 而当前的在线用户信息是 时刻都可能在变化的 也就是说 我们需要一种存储数据的 容器 它能够自动的改变这个容器的所能存放的数据数量的大小 这一点上 如果使用

6、数组来存储的话 就显得十分的笨拙 2 我们再假设这样一种场景 假定一个购物网站 经过一段 时间的运行 我们已经存储了一系列的购物清单了 购物清单中 有商品信息 如果我们想要知道这段时间里面有多少种商品被销 售出去了 那么我们就需要一个容器能够自动的过滤掉购物清单 中的关于商品的重复信息 如果使用数组 这也是很难实现的 3 最后再想想 我们经常会遇到这种情况 我知道某个人的 帐号名称 希望能够进一步了解这个人的其他的一些信息 也就 是说 我们在一个地方存放一些用户信息 我们希望能够通过用 户的帐号来查找到对应的该用户的其他的一些信息 再举个查字 典例子 假设我们希望使用一个容器来存放单词以及对于

7、这个单 词的解释 而当我们想要查找某个单词的意思的时候 能够根据 提供的单词在这个容器中找到对应的单词的解释 如果使用数组 来实现的话 就更加的困难了 为解决这些问题 Java 里面就设计了容器集合 不同的容器集合以 不同的格式保存对象 数数学学背背景景 在常见用法中 集合 collection 和数学上直观的集 set 的 概念是相同的 集是一个唯一项组 也就是说组中没有重复项 实际上 集合框架 包含了一个 Set 接口和许多具体的 Set 类 但正式的集概 念却比 Java 技术提前了一个世纪 那时英国数学家 George Boole 按逻辑正式的定义了集的概念 大部分人在小学时通过我们熟

8、悉的维恩图 引入的 集的交 和 集的并 学到过一些集的理论 集的基本属性如下 集内只包含每项的一个实例 集可以是有限的 也可以是无限的 可以定义抽象概念 集不仅是逻辑学 数学和计算机科学的基础 对于商业和系统的日常 应用来说 它也很实用 连接池 这一概念就是数据库服务器的一个开 放连接集 Web 服务器必须管理客户机和连接集 文件描述符提供了操作 系统中另一个集的示例 映射是一种特别的集 它是一种对 pair 集 每个对表示一个元 素到另一元素的单向映射 一些映射示例有 IP 地址到域名 DNS 的映射 关键字到数据库记录的映射 字典 词到含义的映射 2 进制到 10 进制转换的映射 就像集一

9、样 映射背后的思想比 Java 编程语言早的多 甚至比计 算机科学还早 而Java 中的 Map 就是映射的一种表现形式 1 1 1 1 2 2 容容器器的的分分类类 既然您已经具备了一些集的理论 您应该能够更轻松的理解 集合 框架 集合框架 由一组用来操作对象的接口组成 不同接口描述不同 类型的组 在很大程度上 一旦您理解了接口 您就理解了框架 虽然您 总要创建接口特定的实现 但访问实际集合的方法应该限制在接口方法的 使用上 因此 允许您更改基本的数据结构而不必改变其它代码 框架接 口层次结构如下图所示 Java 容器类类库的用途是 保存对象 并将其划分为两个不同的 概念 1 Collect

10、ion 一组对立的元素 通常这些元素都服从某种规则 List 必须保持元素特定的顺序 而Set 不能有重复元素 2 Map 一组 成对的 键值对 对象 初看起来这似乎应该是一 个 Collection 其元素是成对的对象 但是这样的设计实现起来 太笨拙了 于是我们将Map 明确的提取出来形成一个独立的概念 Map 一样容易扩展成多维Map 无需增加新的概念 只要让Map 中的键值对的每个 值 也是一个 Map 即可 Collection 和 Map 的区别在于容器中每个位置保存的元素个数 C ollection 每个位置只能保存一个元素 对象 此类容器包括 Lis t 它以特定的顺序保存一组元

11、素 Set 则是元素不能重复 Map 保存的是 键值对 就像一个小型数据库 我们可以通过 键 找到该键对应的 值 Collection 对象之间没有指定的顺序 允许重复元素 Set 对象之间没有指定的顺序 不允许重复元素 List 对象之间有指定的顺序 允许重复元素 并引入位 置下标 Map 接口用于保存关键字 Key 和数值 Value 的 集合 集合中的每个对象加入时都提供数值和关键字 Map 接口既不继承 Set 也不继承 Collection List Set Map 共同的实现基础是Object 数组 除了四个历史集合类外 Java 2 框架还引入了六个集合实现 如下 表所示 接口接

12、口实现实现历史集合类历史集合类 Set HashSet TreeSet List ArrayList Vector LinkedList Stack Map HashMap Hashtable TreeMap Properties 历史集合类部分解释历史集合类部分解释 Vector 是个像可增大数组的历史集合类 但它可以存储不同类型的数 据元素 Java 2 SDK 版本 2 中 Vector 类被改良到 集合框架 层次 结构中以实现 List 接口 但是 如果您在使用新框架 您应该使用 ArrayList 而不是 List 从 Vector 转换为 ArrayList 时 一个关键的差别是

13、为了更 改元素值的位置 参数的顺序被颠倒了 Stack 类继承 Vector 通过 push 和 pop 方法以实现一个 标准的后进先出 last in first out LIFO 堆栈 可是 我们要 当心 因为 Stack 类继承 Vector 类 您仍然可以用被继承的 Vect or 的方法访问或修改 Stack E En nu um me er ra at ti io on n 接接口口 Enumeration 接口允许您迭代集合中的所有元素 在 集合框架 中 该接口被 Iterator 接口替代 但是 并不是所有的库都支持较新的 接口 所以您可能会发现自己常常使用 Enumerati

14、on 尽管有些人更喜 欢 Iterator 这个方法名称 但用 Enumeration 迭代和用 Iterator 迭代类似 不过 Enumeration 不支持除去操作 Enumeration enum while enum hasNextElement Object element iterator nextElement process eleme nt Hashtable 实现是个一般的字典 它允许存储任何对象作为它的键或 值 包括 null 在 Java 2 SDK 版本 1 2 中 这个类被重新改写 到 集合框架 中去实现 Map 接口 所以 您可用原始的 Hashtable 方法

15、或较新的 Map 方法 如果您需要一个同步的 Map 使用 Hashtab le 比使用同步的 HashMap 稍快一些 任何集合 Collection 都能产生一个迭代器 Iterator 而一 个 List 除了能生成一个 ListIterator 列表迭代器 外 还能生成 一个普通迭代器 因为 List 正是从集合继承来的 1 1 2 2 C Co ol ll le ec ct ti io on n 1 1 2 2 1 1 常常用用方方法法 Collection 接口用于表示任何对象或元素组 想要尽可能以常规方式处理一 组元素时 就使用这一接口 Collection 在前面的大图也可以看

16、出 它是Lis t 和 Set 的父类 并且它本身也是一个接口 它定义了作为集合所应该拥有的一些 方法 如下 注意 集合必须只有对象 集合中的元素不能是基本数据类型 Collection 接口支持如添加和除去等基本操作 设法除去一个元素时 如果这 个元素存在 除去的仅仅是集合中此元素的一个实例 boolean add Object element boolean remove Object element Collection 接口还支持查询操作 int size boolean isEmpty boolean contains Object element Iterator iterator 组操作 Collection 接口支持的其它操作 要么是作用于元素组的任务 要么是同时作用于整个集合的任务 boolean containsAll Collection collection boolean addAll Collection collection void clear void removeAll Collection collection void retainAll Col

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 设计及方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号