久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

vector

 最強(qiáng)火槍手 2009-02-23
原文:http://dang./blog/239799 Vector 類可以實(shí)現(xiàn)可增長的對象數(shù)組。與數(shù)組一樣,,它包含可以使用整數(shù)索引進(jìn)行訪問的組件,。但是,Vector 的大小可以根據(jù)需要增大或縮小,,以適應(yīng)創(chuàng)建 Vector 后進(jìn)行添加或移除項(xiàng)的操作,。 Vector繼承自AtrastractList,實(shí)現(xiàn)了 Serializable, Cloneable, Iterable, Collection, List, RandomAccess 的接口,。 每個(gè)Vector會試圖通過維護(hù) capacity 和 capacityIncrement 來優(yōu)化存儲管理,。capacity 始終至少應(yīng)與向量的大小相等;這個(gè)值通常比后者大些,,因?yàn)殡S著將組件添加到向量中,,其存儲將按 capacityIncrement 的大小增加存儲塊。應(yīng)用程序可以在插入大量組件前增加向量的容量,;這樣就減少了增加的重分配的量。 構(gòu)造函數(shù)Vector(),,實(shí)現(xiàn)一個(gè)空向量,,其內(nèi)部數(shù)組大小為10,,標(biāo)準(zhǔn)容量增量為0。 目前看來,,Vector和ArrayList很像,,二者的區(qū)別可參見以下比較(摘自http://java./advance/37954.html ): Vector 和 ArrayList的不同      有的時(shí)候 Vector更好一些;有的時(shí)候ArrayList 更好一些;有的時(shí)候你一個(gè)也不想用。但愿,,你不是在期望一個(gè)簡單明了的答案,,因?yàn)榇鸢敢蚰阍谟盟麄冏鍪裁炊āO旅媸且紤]的四個(gè)方面:      API      同步-Synchronization      數(shù)據(jù)增長-Data growth      使用方法-Usage patterns      讓我一個(gè)一個(gè)來解釋吧,。      API      在The Java Programming Language (Addison-Wesley, June 2000) 中Ken Arnold, James Gosling, 和 David Holmes 是這樣描述Vector的,,它是更ArrayList類似的一個(gè)東西,所以從API的觀點(diǎn)來看,,它們倆是很相似的,。但是,它們之間還是有些微的差別的,。      Synchronization      Vectors是可同步化的,,意思就是說,任何操作Vector的內(nèi)容的方法都是線程安全 的,,相反的,,另一方面,ArrayList是不可同步化的,,所以也不是線程安全 的,。如果你知道了這些的話,你就會發(fā)現(xiàn),,Vector的同步會讓它在性能發(fā)方面有一些小問題,。所以,如果你不需要線程安全的話,,那么就使用ArrayList吧,。為什么要為沒有必要的同步付出代價(jià)呢?      Data growth      實(shí)際上,,不管是ArrayList還是Vector,,在它們內(nèi)部都是使用一個(gè)Array來保存數(shù)據(jù)的。編程過程中,,在使用它們?nèi)魏我粋€(gè)的時(shí)候,,你都需要記住這一點(diǎn)。你在往一個(gè)ArrayList或者Vector里插入一個(gè)元素的時(shí)候,,如果內(nèi)部數(shù)組空間不夠了,,這個(gè)對象(譯者按:指的是你使用的 ArrayList或者Vector)就要擴(kuò)展它的大小。Vector在默認(rèn)情況下是產(chǎn)生一個(gè)雙倍大小,,而ArrayList增加50%的大小,。只要你合理的使用這些類,,你就可以結(jié)束你在增加新的元素的時(shí)候所付出的性能代價(jià)。把對象(譯者按:指的是你使用的ArrayList或者Vector)的初始化容量指定為你編程過程中所能用到的最大的容量總是最好的辦法,。仔細(xì)的指定容量,,你可以避免以后改變內(nèi)部Array容量,所要付出的代價(jià),。如果你并不知道到底有多少個(gè)數(shù)據(jù),,當(dāng)是你知道數(shù)據(jù)的增長率,Vector確實(shí)有一點(diǎn)點(diǎn)優(yōu)勢,,因?yàn)槟憧梢灾付ㄔ黾又?譯者按,,如果沒有猜錯(cuò)的話,作者說的方法應(yīng)該是 setSize(int newSize) Sets the size of this vector.),。      Usage patterns      ArrayList和Vector在從指定位置取得元素,,從容器的末尾增加和刪除元素都非常的有效,所有的這些操作都能在一個(gè)常數(shù)級的時(shí)間(O(1)) 內(nèi)完成,。但是從一個(gè)其他的位置增加和刪除一個(gè)元素就顯得頗為費(fèi)時(shí),,差不多需要的時(shí)間為O(n-i),這里的n代表元素個(gè)數(shù),,i代表要增加和刪除的元素所在的位置,。這些操作需花費(fèi)更多的時(shí)間,因?yàn)槟阈枰€(gè)移動i和更高位置的元素,。那么,,以上這些到底說明了什么呢?      這意味著,,如果你取得一個(gè)元素,,或者從數(shù)組末尾增加或刪除一個(gè)元素的話,隨便你使用Vector和ArrayList,。如果你想要對數(shù)組內(nèi)容做其他操作的話,,那么就為自己好另一個(gè)容器吧。比喻說,,LinkedList可以在常數(shù)級時(shí)間(O(1))內(nèi)為任意一個(gè)位置的元素增加和刪除,。但是,取得一個(gè)元素,,會稍微慢一點(diǎn),,時(shí)間要用O(i) ,這個(gè)i是元素的位置,。通過ArrayList也是很簡單的,,因?yàn)槟憧梢院唵问褂靡粋€(gè)索引,而不是構(gòu)造一個(gè)iterator 。LinkedList也為每個(gè)插入的元素建立一個(gè)內(nèi)部對象,。所以,,你也必須知道,同時(shí)產(chǎn)生了垃圾對象,。      最后,Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar 里的“實(shí)踐41“建議你使用一個(gè)普通的原始的數(shù)組來代替Vector和ArrayListe,,特別是對效率優(yōu)先的代碼來說,。通過使用數(shù)組(array),你可以避免同步,,額外的方法調(diào)用,,非理想化的大小改變。你付出的只是額外的開發(fā)時(shí)間,。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多