快速业务通道

J2SE - 集合框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

J2SE - 集合框架

时间:2010-12-17

我们都知道,当想要保存一组基本类型数据时,数组是最有效的保存方式,也是推荐使用这种方式的。但是数组是固有大小的,当运行时才知道大小的程序,这种方式使用就受限制了,这就是Java容器类产生的原因。Java集合类有几个特点:首先,这种容器是高性能的,对基本数据集合(动态数组、链接表、树和散列表)的实现是高效率的。第二,容器类允许不同类型的类集合以相同的方式和高度互操作方式工作。第三,容器类是容易扩展或修改的。容器类的常用的基本类型有List、Set和Map,这些对象类型也称为集合类,但是在Java中使用了Collection这个名字来指代该类库的一个特殊子集,所以业界使用了范围更广泛的“容器”来称呼。

Collection:是一个接口,它位于集合框架层次结构的顶层,继承自Iterable接口,说明是可以用Iterator迭代器来访问该集合中的元素的。又有List、Set和Queue接口继承Collection接口,直接实现该接口的是一个叫AbstractCollection的抽象类,该抽象类以最大限度地减少了实现此接口所需的工作。

List:继承自Collection接口,表示有序的、可包括重复元素的列表。同时拥有Collection内的方法外,还添加了大量的方法,使得可以在List的中间插入和删除元素。实现该接口的基本类有ArrayList和LinkedList. ArrayList:擅长于对元素的随机访问,但是在插入和删除元素时效率较慢。其实,看看ArrayList类实现的源代码就知道,ArrayList是以线性表的数据结构形式存取数据的,初始化的表大小为10,下面就有几个经常用到的核心方法:add(E e):在当前表的末尾插入元素,如果在前面表不满的情况下,也是很高效的,直接插入到末尾,但是如果在当前表已经满的情况下,就要重新生成一个比当前表大小更大的新表,新表的大小是当前表大小的1.5倍加1,比如当前表长度为20的,新表的大小就为31,还需要把当前表元素复制到新表中去,然后把当前表引用指向新表,最后把数值插入到表末尾,所以这种操作是非常低效的。

add(int index,E element):在指定索引位置插入元素,检查表大小和重新追加表大小和上面的add(E e)方式是一样的。最后是要把index以后的元素都是要依次往后移一个大小,然后把元素插入到index位置上去。涉及到表的复制和表内元素的移动,所以效率也是比add(E e)方法还要低。

remove(int index):在指定索引位置删除元素,就是把index位置后的所有元素都往前移一个大小,也是涉及到表内元素的移动,效率也是很低的。

remove(Object o):删除指定的元素,也就需要查找出该元素在表中出现第一次的位置,查找是用到顺序一个一个进行匹配的方法,找出后就把该元素后面的所有元素往前移一个大小。该方法涉及到顺序查找和表内元素移动,比remove(int index)方法更低效。

set(int index,E element):替换表中索引为index的元素值,返回被替换的值,直接用下标索引访问元素,所以效率非常高。

get(int index):获取索引为index的元素,直接用下标索引访问,所以效率也是非常高。

indexOf(Object o):获取元素的索引号,也就是需要查找,虽然用到了顺序查找法,但效率还是比较高的。

LinkedList:擅长于对元素的插入和删除操作,但对于随机访问元素比较慢。该类的实现是以双向链表的数据结构为基础的,所以是比较消耗内存的,但它的特定集比ArrayList更大。双向链表,每个节点都有三个域,两个域是存放前后节点的内存地址引用的,一个域是存放数据元素的。在LinkedList类中,有一个叫Entry的内部类,是private的,里面三个属性,分别是element、next和previous,分别对应了双向链表中的三个域,在ArrayList类中每实例化一个Entry就生成一个节点。下

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号