<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kooyee ‘s blog

    開源軟件, 眾人努力的結(jié)晶, 全人類的共同財富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    [Data Structure] Vector 和 ArrayList的不同

    Posted on 2008-02-09 19:23 kooyee 閱讀(298) 評論(0)  編輯  收藏 所屬分類: Java
    Vector 和 ArrayList的不同
      
      有的時候 Vector更好一些;有的時候ArrayList 更好一些;有的時候你一個也不想用。但愿,你不是在期望一個簡單明了的答案,因為答案因你在用他們做什么而定。下面是要考慮的四個方面:
      
      
      API
      
      同步-Synchronization
      
      數(shù)據(jù)增長-Data growth
      
      使用方法-Usage patterns
      
      讓我一個一個來解釋吧。
      
      API
      
      在The Java Programming Language (Addison-Wesley, June 2000) 中Ken Arnold, James Gosling, 和 David Holmes 是這樣描述Vector的,它是更ArrayList類似的一個東西,所以從API的觀點來看,它們倆是很相似的。但是,它們之間還是有些微的差別的。
      
      Synchronization
      
      Vectors是可同步化的,意思就是說,任何操作Vector的內(nèi)容的方法都是線程安全的,相反的,另一方面,ArrayList是不可同步化的,所以也不是線程安全的。如果你知道了這些的話,你就會發(fā)現(xiàn),Vector的同步會讓它在性能發(fā)方面有一些小問題。所以,如果你不需要線程安全的話,那么就使用ArrayList吧。為什么要為沒有必要的同步付出代價呢?
      
      Data growth
      
      實際上,不管是ArrayList還是Vector,在它們內(nèi)部都是使用一個Array來保存數(shù)據(jù)的。編程過程中,在使用它們?nèi)魏我粋€的時候,你都需要記住這一點。你在往一個ArrayList或者Vector里插入一個元素的時候,如果內(nèi)部數(shù)組空間不夠了,這個對象(譯者按:指的是你使用的ArrayList或者Vector)就要擴展它的大小。Vector在默認情況下是產(chǎn)生一個雙倍大小,而ArrayList增加50%的大小。只要你合理的使用這些類,你就可以結(jié)束你在增加新的元素的時候所付出的性能代價。把對象(譯者按:指的是你使用的ArrayList或者Vector)的初始化容量指定為你編程過程中所能用到的最大的容量總是最好的辦法。仔細的指定容量,你可以避免以后改變內(nèi)部Array容量,所要付出的代價。如果你并不知道到底有多少個數(shù)據(jù),當是你知道數(shù)據(jù)的增長率,Vector確實有一點點優(yōu)勢,因為你可以指定增加值(譯者按,如果沒有猜錯的話,作者說的方法應該是setSize(int newSize) Sets the size of this vector.)。
      
      Usage patterns
      
      ArrayList和Vector在從指定位置取得元素,從容器的末尾增加和刪除元素都非常的有效,所有的這些操作都能在一個常數(shù)級的時間(O(1))內(nèi)完成。但是從一個其他的位置增加和刪除一個元素就顯得頗為費時,差不多需要的時間為O(n-i),這里的n代表元素個數(shù),i代表要增加和刪除的元素所在的位置。這些操作需花費更多的時間,因為你需要挨個移動i和更高位置的元素。那么,以上這些到底說明了什么呢?
      
      這意味著,如果你取得一個元素,或者從數(shù)組末尾增加或刪除一個元素的話,隨便你使用Vector和ArrayList。如果你想要對數(shù)組內(nèi)容做其他操作的話,那么就為自己好另一個容器吧。比喻說,LinkedList可以在常數(shù)級時間(O(1))內(nèi)為任意一個位置的元素增加和刪除。但是,取得一個元素,會稍微慢一點,時間要用O(i) ,這個i是元素的位置。通過ArrayList也是很簡單的,因為你可以簡單使用一個索引,而不是構(gòu)造一個iterator 。LinkedList也為每個插入的元素建立一個內(nèi)部對象。所以,你也必須知道,同時產(chǎn)生了垃圾對象。
      
      最后,Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar 里的“實踐41“建議你使用一個普通的原始的數(shù)組來代替Vector和ArrayListe,特別是對效率優(yōu)先的代碼來說。通過使用數(shù)組(array),你可以避免同步,額外的方法調(diào)用,非理想化的大小改變。你付出的只是額外的開發(fā)時間。
    主站蜘蛛池模板: 青春禁区视频在线观看直播免费| 免费看男人j放进女人j免费看| 黄色免费网站网址| 亚洲AV无码乱码国产麻豆穿越| 国产在线国偷精品免费看| 国产美女亚洲精品久久久综合| 日韩a毛片免费观看| 久久精品国产亚洲一区二区三区| 四虎影视久久久免费观看| 亚洲AⅤ无码一区二区三区在线| 免费夜色污私人影院网站电影| 亚洲AV无码成H人在线观看| 国产福利免费视频| 亚洲精品无码久久久久去q| 国产免费爽爽视频在线观看| 久久丫精品国产亚洲av不卡| 久久久久久久免费视频| 亚洲高清一区二区三区电影| 亚洲福利精品一区二区三区 | 亚洲国产av一区二区三区丶| 久草视频免费在线观看| 亚洲偷自拍另类图片二区| 国产v片免费播放| 色播在线永久免费视频网站| 77777_亚洲午夜久久多人| 免费电视剧在线观看| 免费人成大片在线观看播放电影| 亚洲中文字幕在线第六区| 69成人免费视频| 免费播放美女一级毛片| 亚洲αv在线精品糸列| 成人影片麻豆国产影片免费观看| 自拍偷自拍亚洲精品偷一| 亚洲AV无码一区东京热久久 | 性盈盈影院免费视频观看在线一区| 国产亚洲精品91| 亚洲av午夜福利精品一区 | 国产精品爱啪在线线免费观看| 亚洲乱码日产精品一二三| 国产成人亚洲精品狼色在线| 亚洲第一极品精品无码久久|