java集合collectionlistsetmap使用详解.doc
《java集合collectionlistsetmap使用详解.doc》由会员分享,可在线阅读,更多相关《java集合collectionlistsetmap使用详解.doc(45页珍藏版)》请在课桌文档上搜索。
1、-. z.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 集集合合框框架架 21 1. .1 1 集集合合框框架架概概述述 21 1. .1 1. .1 1 容容器器简简介介 21 1. .1 1.
2、.2 2 容容器器的的分分类类 51.2 Collection61.2.1 常用方法 61 1. .2 2. .2 2 迭迭代代器器 91.3 List111.3.1 概述 111.3.2 常用方法 121 1. .3 3. .3 3 实实现现原原理理 171.4 Map201.4.1 概述 201.4.2 常用方法 211 1. .4 4. .3 3 C Co om mp pa ar ra ab bl le e 接接口口 271 1. .4 4. .4 4 实实现现原原理理 291 1. .4 4. .5 5 覆覆写写 h ha as sh hC Co od de e( () )341.5
3、Set391.5.1 概述 391.5.2 常用方法 391 1. .5 5. .3 3 实实现现原原理理 451.6 总结 :集合框架中常用类比拟462 练习 473 附录:排序 481 1 集集合合框框架架集集合合框框架架概概述述容容器器简简介介-. z.到目前为止,我们已经学习了如何创立多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情。举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号。我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000 个雇员,然后再将这些雇员逐一插入?如果已经插入了500 条记录,
4、这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内存中将500 条记录全部下移后,再从开头插入新的记录 还是创立一个映射来记住每个对象的位置?当决定如何存储对象的集合时,必须考虑如下问题。对于对象集合,必须执行的操作主要以下三种:添加新的对象删除对象查找对象我们必须确定如何将新的对象添加到集合中。可以将对象添加到集合的末尾、开头或者中间的 *个逻辑位置。从集合中删除一个对象后,对象集合中现有对象会有什么影响呢?可能必须将内存移来移去,或者就在现有对象所驻留的内存位置下一个洞。在内存中建立对象集合后,必须确定如何定位特定对象。可建立一种机制,利用该机制可根据 *些搜索条件 例如身份证号 直
5、接定位到目标对象;否则,便需要遍历集合中的每个对象,直到找到要查找的对象为止。前面大家已经学习过了数组。数组的作用是可以存取一组数据。但是它却存在一些缺点,使得无法使用它来比拟方便快捷的完成上述应用场景的要求。1.首先,在很多数情况下面,我们需要能够存储一组数据的容器,这一点虽然数组可以实现,但是如果我们需要存储的数据的个数多少并不确定。比方说:我们需要在容器里面存储*个应用系统的当前的所有的在线用户信息,而当前的在线用户信息是时刻都可能在变化的。也就是说,我们需要一种存储数据的容器,它能够自动的改变这个容器的所能存放的数据数量的大小。这一点上,如果使用数组来存储的话,就显得十分的笨拙。-.
6、z.2.我们再假设这样一种场景:假定一个购物网站,经过一段时间的运行,我们已经存储了一系列的购物清单了,购物清单中有商品信息。如果我们想要知道这段时间里面有多少种商品被销售出去了。则我们就需要一个容器能够自动的过滤掉购物清单中的关于商品的重复信息。如果使用数组,这也是很难实现的。3.最后再想想,我们经常会遇到这种情况,我知道*个人的帐号名称,希望能够进一步了解这个人的其他的一些信息。也就是说,我们在一个地方存放一些用户信息,我们希望能够通过用户的帐号来查找到对应的该用户的其他的一些信息。再举个查字典例子:假设我们希望使用一个容器来存放单词以及对于这个单词的解释,而当我们想要查找 *个单词的意思
7、的时候,能够根据提供的单词在这个容器中找到对应的单词的解释。如果使用数组来实现的话,就更加的困难了。为解决这些问题, Java 里面就设计了容器集合,不同的容器集合以不同的格式保存对象。数数学学背背景景在常见用法中,集合 collection和数学上直观的集 set的概念是一样的。集是一个唯一项组,也就是说组中没有重复项。实际上,集合框架 包含了一个 Set 接口和许多具体的Set 类。但正式的集概念却比 Java 技术提前了一个世纪,那时英国数学家 George Boole 按逻辑正式的定义了集的概念。大局部人在小学时通过我们熟悉的维恩图引入的集的交 和集的并 学到过一些集的理论。集的根本属
8、性如下:集内只包含每项的一个实例集可以是有限的,也可以是无限的可以定义抽象概念集不仅是逻辑学、数学和计算机科学的根底,对于商业和系统的日常应用来说,它也很实用。 连接池 这一概念就是数据库效劳器的一个开-. z.放连接集。 Web 效劳器必须管理客户机和连接集。文件描述符提供了操作系统中另一个集的例如。映射是一种特别的集。它是一种对pair集,每个对表示一个元素到另一元素的单向映射。一些映射例如有:IP 地址到域名 DNS的映射关键字到数据库记录的映射字典词到含义的映射 2 进制到 10 进制转换的映射就像集一样,映射背后的思想比 Java 编程语言早的多,甚至比计算机科学还早。而Java 中
9、的 Map 就是映射的一种表现形式。容容器器的的分分类类既然您已经具备了一些集的理论,您应该能够更轻松的理解集合框架。 集合框架 由一组用来操作对象的接口组成。不同接口描述不同类型的组。在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创立接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改根本的数据构造而不必改变其它代码。框架接口层次构造如以下图所示。Java 容器类类库的用途是 保存对象 ,并将其划分为两个不同的概念:1Collection 。一组对立的元素,通常这些元素都服从*种规则。List 必须保持元素特定的顺序,而Set 不能有重复元素。2Map
10、 。一组成对的 键值对 对象。初看起来这似乎应该是一个Collection ,其元素是成对的对象,但是这样的设计实现起来太笨拙了,于是我们将Map 明确的提取出来形成一个独立的概念。Map 一样容易扩展成多维Map ,无需增加新的概念,只要让Map 中的键值对的每个 值也是一个 Map 即可。-. z.Collection 和 Map 的区别在于容器中每个位置保存的元素个数。Collection 每个位置只能保存一个元素对象。此类容器包括: List ,它以特定的顺序保存一组元素;Set 则是元素不能重复。Map 保存的是 键值对 ,就像一个小型数据库。我们可以通过键找到该键对应的 值。Col
11、lection 对象之间没有指定的顺序,允许重复元素。Set 对象之间没有指定的顺序,不允许重复元素List对象之间有指定的顺序,允许重复元素,并引入位置下标。Map 接口用于保存关键字 Key和数值 Value的集合,集合中的每个对象参加时都提供数值和关键字。Map 接口既不继承 Set 也不继承 Collection。List、Set、Map 共同的实现根底是Object 数组除了四个历史集合类外, Java 2 框架还引入了六个集合实现,如下表所示。接口接口实现实现历史集合类历史集合类SetHashSet TreeSet ListArrayListVector LinkedListSta
12、ckMapHashMapHashtable TreeMapProperties历史集合类局部解释历史集合类局部解释Vector 是个像可增大数组的历史集合类,但它可以存储不同类型的数据元素。 Java 2 SDK,版本 2 中 Vector 类被改进到 集合框架 层次构造中以实现 List 接口。但是,如果您在使用新框架,您应该使用 ArrayList,而不是 List。从 Vector 转换为 ArrayList 时,一个关键的差异是 为了更改元素值的位置,参数的顺序被颠倒了。 Stack 类继承 Vector,通过 push() 和 pop() 方法以实现一个标准的后进先出 last-in
13、-first-outLIFO堆栈。可是,我们要留-. z.神。因为 Stack 类继承 Vector 类,您仍然可以用被继承的 Vector 的方法访问或修改 Stack。E En nu um me er ra at ti io on n 接接口口Enumeration 接口允许您迭代集合中的所有元素。在集合框架 中,该接口被 Iterator 接口替代。但是,并不是所有的库都支持较新的接口,所以您可能会发现自己常常使用 Enumeration。尽管有些人更喜欢 Iterator 这个方法名称,但用 Enumeration 迭代和用 Iterator 迭代类似。不过, Enumeration
14、不支持除去操作。Enumeration enum = .; while (enum.hasNe*tElement() Object element = iterator.ne*tElement(); / process element Hashtable 实现是个一般的字典,它允许存储任何对象作为它的键或值包括 null。在 Java 2 SDK,版本 1.2 中,这个类被重新改写到集合框架 中去实现 Map 接口。所以,您可用原始的 Hashtable 方法或较新的 Map 方法。如果您需要一个同步的 Map,使用 Hashtable 比使用同步的 HashMap 稍快一些。任何集合 ( C
15、ollection )都能产生一个迭代器 ( Iterator ),而一个 List 除了能生成一个 ListIterator 列表迭代器 外,还能生成一个普通迭代器 ,因为 List 正是从集合继承来的 .C Co ol ll le ec ct ti io on n常常用用方方法法Collection接口用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。Collection 在前面的大图也可以看出,它是List 和 Set 的父类。并且它本身也是一个接口。它定义了作为集合所应该拥有的一些方法。如下:注意 :集合必须只有对象,集合中的元素不能是根本数据类型。Coll
16、ection 接口支持如添加和除去等根本操作。设法除去一个元素时,如果这个元素存在,除去的仅仅是集合中此元素的一个实例。boolean add(Object element) boolean remove(Object element) -. z.Collection 接口还支持查询操作:int size() boolean isEmpty() boolean contains(Object element) Iterator iterator() 组操作: Collection 接口支持的其它操作,要么是作用于元素组的任务,要么是同时作用于整个集合的任务。boolean containsAl
17、l(Collection collection) boolean addAll(Collection collection) void clear() void removeAll(Collection collection) void retainAll(Collection collection) containsAll() 方法允许您查找当前集合是否包含了另一个集合的所有元素,即另一个集合是否是当前集合的子集。其余方法是可选的,因为特定的集合可能不支持集合更改。 addAll() 方法确保另一个集合中的所有元素都被添加到当前的集合中,通常称为并。 clear() 方法从当前集合中除去所有
18、元素。 removeAll() 方法类似于 clear() ,但只除去了元素的一个子集。 retainAll() 方法类似于 removeAll() 方法,不过可能感到它所做的与前面正好相反:它从当前集合中除去不属于另一个集合的元素,即交。我们看一个简单的例子,来了解一下集合类的根本方法的使用:importimport java.util.*;publicclasspublicclass CollectionToArray publicstaticvoidpublicstaticvoid main(String args) Collection collection1=newnew Array
19、List();/创立一个集合对象collection1.add(000);/添加对象到 Collection 集合中collection1.add(111);collection1.add(222);System.out.println(集合 collection1 的大小:+collection1.size();System.out.println(集合 collection1 的内容:+collection1);collection1.remove(000);/从集合 collection1 中移除掉 000 这个对象System.out.println(集合 collection1 移除
20、 000 后的内容:+collection1);System.out.println(集合 collection1 中是否包含 000 :+collection1.contains(000);System.out.println(集合 collection1 中是否包含 111 :+collection1.contains(111);Collection collection2=newnew ArrayList();collection2.addAll(collection1);/将 collection1 集合中的元素全部都加到collection2 中System.out.println(
21、集合 collection2 的内容:+collection2);collection2.clear();/清空集合 collection1 中的元素System.out.println(集合 collection2 是否为空:+collection2.isEmpty();-. z./将集合 collection1 转化为数组Object s= collection1.toArray();forfor(intint i=0;is.length;i+)System.out.println(si);运行结果为:集合 collection1 的大小:3集合 collection1 的内容:000,
22、111, 222集合 collection1 移除 000 后的内容:111, 222集合 collection1 中是否包含 000 :false集合 collection1 中是否包含 111 :true集合 collection2 的内容:111, 222集合 collection2 是否为空:true111222这里需要注意的是, Collection 它仅仅只是一个接口,而我们真正使用的时候,确是创立该接口的一个实现类。做为集合的接口,它定义了所有属于集合的类所都应该具有的一些方法。而 ArrayList 列表类是集合类的一种实现方式。这里需要一提的是,因为Collection 的实
23、现根底是数组,所以有转换为 Object 数组的方法:Object toArray() Object toArray(Object a)其中第二个方法 Object toArray(Object a) 的参数 a 应该是集合中所有存放的对象的类的父类。迭迭代代器器任何容器类,都必须有 *种方式可以将东西放进去,然后由*种方式将东西取出来。毕竟,存放事物是容器最根本的工作。对于ArrayList,add是插入对象的方法,而get()是取出元素的方式之一。 ArrayList 很灵活,可以随时选取任意的元素,或使用不同的下标一次选取多个元素。如果从更高层的角度思考,会发现这里有一个缺点:要使用容器
24、,必须知道其中元素确实切类型。初看起来这没有什么不好的,但是考虑如下-. z.情况:如果原本是ArrayList ,但是后来考虑到容器的特点,你想换用Set ,应该怎么做?或者你打算写通用的代码,它们只是使用容器,不知道或者说不关心容器的类型,则如何才能不重写代码就可以应用于不同类型的容器?所以迭代器 (Iterator)的概念,也是出于一种设计模式就是为达成此目的而形成的。所以Collection 不提供 get()方法。如果要遍历Collectin 中的元素,就必须用Iterator。迭代器 Iterator本身就是一个对象,它的工作就是遍历并选择集合序列中的对象,而客户端的程序员不必知道
25、或关心该序列底层的构造。此外,迭代器通常被称为 轻量级 对象,创立它的代价小。但是,它也有一些限制,例如, *些迭代器只能单向移动。Collection接口的iterator()方法返回一个Iterator。Iterator和您可能已经熟悉的Enumeration接口类似。使用 Iterator接口方法,您可以从头至尾遍历集合,并平安的从底层Collection中除去元素。下面,我们看一个对于迭代器的简单使用:i im mp po or rt t java.util.ArrayList;i im mp po or rt t java.util.Collection;i im mp po or
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 集合 collectionlistsetmap 使用 详解
文档标签
- 使用Excel地分析报告工具库做多元回归分析报告
- illustrator透视网格详解
- CDockablePane类的使用
- linux中vim编辑器的使用
- java集合collectionlistsetmap使用详解
- 教学管理系统软件-使用说明书
- ad智能dns配置及详解排错
- pci引脚定义pci接口定义
- CAD高版本出工程图详解
- TF存储卡SD卡在移动设备或电脑上无法格式化地解决方法
- Win10IE11地缓存位置及在线视频下载
- BT303C故障详解
- Word中类似正则匹配地查找替换通配符地使用详解
- 我是一个大苹果
- 面对空难我们如何逃生自救
- 扶贫对象动态管理工作进度汇报
- 寒食节的起源是一个流传两千余的忠义故事
- 教学设计集合的基本运算第2课时
- 各型号升级接口针脚定义大全精
- 快递物流评价接口API文档附demo
链接地址:https://www.desk33.com/p-6436.html