java对象容器

java对象容器

ID:40557265

大小:64.50 KB

页数:4页

时间:2019-08-04

java对象容器_第1页
java对象容器_第2页
java对象容器_第3页
java对象容器_第4页
资源描述:

《java对象容器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、java对象容器2006年09月21日星期四下午07:50      数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有primitives.数组是java提供的,是能随机存储和访问reference序列的诸多方法中,最高效的一种。数组是线形序列,所以它可以快速访问其中的元素,但速度是有代价的,当你创建了一个数组之后它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧数组里的reference全部导到新的里面。其实ArrayList就是这么做的。但是这种灵活性

2、所带来的开销,使得ArrayList的效率比      起数组有了明显下降。      在我们写程序的时候往往不知道要用多少对象,或者要用一种更复杂方式来存储对象情况。为此,Java提供了“容器类(containerclass)”。其基本类型有List,Set和Map。有了这些工具,你就能解决很多问题了。它们还有一些别的特性。比方说Set所持有的对象,个个都不同,Map则是一个“关联性数组(associativearray)”,它能在两个对象之间建立联系。此外,与数组不同,它们还能自动调整大小,所以你可以往里面放任意数量的对象。这样写程

3、序的时候,就不用操心要开多大的空间了。 Java2的容器类要解决“怎样持有对象”,而它把这个问题分成两类:1.Collection:通常是一组有一定规律的独立元素。List必须按照特定的顺序持有这些元素,而Set则不能保存重复的元素。(bag没有这个限制,但是Java的容器类库没有实现它,因为List已经提供这种功能了。)2.Map:一组以“键——值”(key-value)形式出现的pair。初看上去,它应该是一个pair的Collection,但是真这么去做的话,它就会变得很滑稽,所以还是把这个概念独立列出来为好。退一步说,真的要用到

4、Map的某个子集的时候,创建一个Collection也是很方便的。Map可以返回“键(key)的”Set,值的Collection,或者pair的Set。和数组一样,Map不需要什么修改,就能很容易地扩展成多维。你只要直接把Map的值设成Map就可以了(然后它的值再是Map,以此类推)。我们先来看看容器的一般特性,然后深入细节,最后再看什么会有这么多版本,以及如何进行选择。 List会老老实实地持有你所输入的所有对象,既不做排序也不做编辑。Set则每个对象只接受一次,而且还要用它自己的规则对元素进行重新排序(一般情况下,你关心的只是Se

5、t包没包括某个对象,而不是它到底排在哪里——如果是那样,你最好还是用List)。而Map也不接收重复的pair,至于是不是重复,要由key来决定。此外,它也有它自己的内部排序规则,不会受输入顺序影响。如果插入顺序是很重要的,那你就只能使用LinkedHashSet或LinkedHashMap了。第一眼看到这张图的时候,你会觉得很震撼。不过你马上就会知道,实际上只有三种容器组件——Map,List和Set,而每种又有两到三个实现。最常用的几个容器已经用粗黑线框了起来。看到这里,这张图就不再那么令人望而生畏了。用点号框起来的是interfa

6、ce,用虚线框起来的是abstract类,实线则表示普通的(“实体concrete”)类。点线的箭头表示类实现了这个interface(或者,abstract类表示部分实现了这个interface)。实线箭头表示这个类可以制造箭头所指的那个类的对象。比如,Collection能制造Iterator,而List还能制造ListIterator(也能制造Iterator,因为List是继承自Collection的)。与存放对象有关的接口包括Collection,List,Set和Map。在理想情况下,绝大多数代码应该只同这些接口打交道,只是

7、在创建容器的时候才要精确地指明它的确切类型。所以你可以这样创建一个List。Listx=newLinkedList();当然,你也可以选择让x成为LinkedList(而不是泛型的List),这样x就带上了准确的类型信息interface的优雅(同时也是它的本意)就在于,你想修改具体的实现的时候,只要改一下创建的声明就可以了,就像这样:Listx=newArrayList();无需惊动其它代码(用迭代器也能获得一些这种泛型性)。这个类系里面有很多以“Abstract”开头的类,初看起来这可能会让人有点不明白。实际上它们只是一些部分实现某

8、个接口的办成品。假如你要编一个你自己的Set,不要从Set接口开始挨个实现它的方法;相反你最好继承AbstractSet,这样就能把编程的工作量压缩到最低了。但是,实际上容器类库的功能已经够强的了,我们要求

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。