日期:2011-03-22 16:17:00 来源:本站整理
调集与承当器[Java编程]
本文“调集与承当器[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
针对一个特定问题的办理,假如事前不知道需求多少个对象,大概它们的持续时间有多长,那么也不知道若何保存那些对象.既然如此,怎样才能知道那些对象要求多少空间呢?事前上根本无法提早知道,除非进入运行期.
在面向对象的计划中,大大都问题的办理办法仿佛都有些草率——只是简单地成立另一种范例的对象.用于办理特定问题的新型对象包容了指向其他对象的句柄.当然,也可以用数组来做一样的事情,那是大大都语言都具有的一种功效.但不能只看到这一点.这种新对象普通叫作“调集”(亦叫作一个“容器”,但AWT在差别的场所利用了这个术语,所以本书将一向相沿“调集”的称谓.在需求的时刻,调会议自动扩大自己,以便适应我们在此中置入的任何东西.所以我们事前没必要知道要在一个调集里容下多少东西.只需成立一个调集,今后的工作让它自己负责好了.
幸运的是,计划优异的OOP语言都配套供应了一系列调集.在C++中,它们是以“尺度模板库”(STL)的情势供应的.Object Pascal用自己的“可视组件库”(VCL)供应调集.Smalltalk供应了一套非常完好的调集.而Java也用自己的尺度库供应了调集.在某些库中,一个通例调集便可满意人们的大大都要求;而在另一些库中(分外是C++的库),则面向差别的需求供应了差别范例的调集.比方,可以用一个矢量统一对全部元素的拜候方法;一个链接列表则用于保证全部元素的插入统一.所以我们能按照自己的需求挑选得当的范例.此中包含集、行列、散列表、树、仓库等等.
全部调集都供应了呼应的读写功效.将某样东西置入集合时,采取的方法是十清楚显的.有一个叫作“推”(Push)、“增添”(Add)或其他近似名字的函数用于做这件事情.但将数据从调集合取出的时刻,方法却并不老是那么明显.假如是一个数组情势的实体,比方一个矢量(Vector),那么大概能用索引运算符或函数.但在很多情形下,这样做常常会无功而返.此外,单选定函数的功效是非常有限的.假如想对调集合的一系列元素举行操作或对比,而不是仅仅面向一个,这时又该怎么办呢?
办法就是利用一个“持续器”(Iterator),它属于一种对象,负责挑选调集内的元素,并把它们供应应担当器的用户.作为一个类,它也供应了一级抽象.操纵这一级抽象,可将调集细节与用于拜候那个调集的代码断绝开.通过担当器的作用,调集被抽象成一个简单的序列.担当器答应我们遍历那个序列,同时毋需关心底子构造是什么——换言之,不管它是一个矢量、一个链接列表、一个仓库,还是其他什么东西.这样一来,我们便可以机动地改变底子数据,不会对程序里的代码造成干扰.Java最开始(在1.0和1.1版中)供应的是一个尺度担当器,名为Enumeration(列举),为它的全部调集类供应服务.Java 1.2新增一个更复杂的调集库,此中包含了一个名为Iterator的担当器,可以做比老式的Enumeration更多的事情.
从计划角度动身,我们需求的是一个全功效的序列.通过对它的操作,应当能办理自己的问题.假如一种范例的序列便可满意我们的全部要求,那么完好没有必要再换用差别的范例.有两方面的缘由促使我们需求对集合作出挑选.首先,调集供应了差别的接口范例以及外部行为.仓库的接口与行为与行列的差别,而行列的接口与行为又与一个集(Set)或列表的差别.操纵这个特点,我们办理问题时便有更大的机动性.
其次,差别的调集在举行特定操作时常常有差别的效率.最好的例子就是矢量(Vector)和列表(List)的辨别.它们都属于简单的序列,拥有完好一致的接口和外部行为.但在履行一些特定的任务时,需求的开销倒是完好差别的.对矢量内的元素举行的随机拜候(存取)是一种常时操作;无论我们挑选的挑选是什么,需求的时间量都是相同的.但在一个链接列表中,若想处处移动,并随机挑选一个元素,就需付出“惨痛”的代价.并且假定某个元素位于列表较远的地方,找到它所需的时间也会长很多.但在另一方面,假如想在序列中部插入一个元素,用列表就比用矢量划算得多.这些以及其他操作都有差别的履行效率,具体取决于序列的底子构造是什么.在计划阶段,我们可以先从一个列表开始.最后调整性能的时刻,再按照情形把它换成矢量.由于抽象是通过担当器举行的,所以能在二者便利地切换,对代码的影响则显得微不足道.
最后,记着调集只是一个用来安排对象的储藏所.假如那个储藏所能满意我们的全部需求,就完好没必要关心它具体是若何实现的(这是大大都范例对象的一个基本概念).假如在一个编程环境中工作,它由于其他因素(比方在Windows下运行,大概由垃圾汇集器带来了开销)产生了内涵的开销,那么矢量和链接列表之间在系统开销上的差别就大概不是一个大问题.我们大概只需求一种范例的序列.乃至可以想象有一个“完善”的调集抽象,它能按照自己的利用方法自动改变基层的实现方法.
以上是“调集与承当器[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:初始化java接口中的字段
- ·下一篇文章:对象的成立和存在时间
- ·中查找“调集与承当器”更多相关内容
- ·中查找“调集与承当器”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论