国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Vector,ArrayList哪一個更好

2019-11-18 14:30:32
字體:
來源:轉載
供稿:網友

  Vector 和 ArrayList的不同
  
  有的時候 Vector更好一些;有的時候ArrayList 更好一些;有的時候你一個也不想用。但愿,你不是在期望一個簡單明了的答案,因為答案因你在用他們做什么而定。下面是要考慮的四個方面:
  
  API
  
  同步-Synchronization
  
  數據增長-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的內容的方法都是線程安全的,相反的,另一方面,ArrayList是不可同步化的,所以也不是線程安全的。假如你知道了這些的話,你就會發現,Vector的同步會讓它在性能發方面有一些小問題。所以,假如你不需要線程安全的話,那么就使用ArrayList吧。為什么要為沒有必要的同步付出代價呢?
  
  Data growth
  
  實際上,不管是ArrayList還是Vector,在它們內部都是使用一個Array來保存數據的。編程過程中,在使用它們任何一個的時候,你都需要記住這一點。你在往一個ArrayList或者Vector里插入一個元素的時候,假如內部數組空間不夠了,這個對象(譯者按:指的是你使用的ArrayList或者Vector)就要擴展它的大小。Vector在默認情況下是產生一個雙倍大小,而ArrayList增加50%的大小。只要你合理的使用這些類,你就可以結束你在增加新的元素的時候所付出的性能代價。把對象(譯者按:指的是你使用的ArrayList或者Vector)的初始化容量指定為你編程過程中所能用到的最大的容量總是最好的辦法。仔細的指定容量,你可以避免以后改變內部Array容量,所要付出的代價。假如你并不知道到底有多少個數據,當是你知道數據的增長率,Vector確實有一點點優勢,因為你可以指定增加值(譯者按,假如沒有猜錯的話,作者說的方法應該是setSize(int newSize) Sets the size of this vector.)。
  
  Usage patterns
  
  ArrayList和Vector在從指定位置取得元素,從容器的末尾增加和刪除元素都非常的有效,所有的這些操作都能在一個常數級的時間(O(1))內完成。但是從一個其他的位置增加和刪除一個元素就顯得頗為費時,差不多需要的時間為O(n-i),這里的n代表元素個數,i代表要增加和刪除的元素所在的位置。這些操作需花費更多的時間,因為你需要挨個移動i和更高位置的元素。那么,以上這些到底說明了什么呢?
  
  這意味著,假如你取得一個元素,或者從數組末尾增加或刪除一個元素的話,隨便你使用Vector和ArrayList。假如你想要對數組內容做其他操作的話,那么就為自己好另一個容器吧。比喻說,LinkedList可以在常數級時間(O(1))內為任意一個位置的元素增加和刪除。但是,取得一個元素,會稍微慢一點,時間要用O(i) ,這個i是元素的位置。通過ArrayList也是很簡單的,因為你可以簡單使用一個索引,而不是構造一個iterator 。LinkedList也為每個插入的元素建立一個內部對象。所以,你也必須知道,同時產生了垃圾對象。
  
  最后,Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar 里的“實踐41“建議你使用一個普通的原始的數組來代替Vector和ArrayListe,非凡是對效率優先的代碼來說。通過使用數組(array),你可以避免同步,額外的方法調用,非理想化的大小改變。你付出的只是額外的開發時間。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杂多县| 寻乌县| 太康县| 汨罗市| 郓城县| 江门市| 滕州市| 乐清市| 公主岭市| 保亭| 潞城市| 桂林市| 雷波县| 准格尔旗| 合川市| 泗阳县| 开封市| 关岭| 新巴尔虎右旗| 甘泉县| 年辖:市辖区| 阜南县| 宣汉县| 伊宁市| 且末县| 苍南县| 大关县| 江山市| 高清| 云南省| 什邡市| 南江县| 哈尔滨市| 大洼县| 满城县| 铜山县| 泸溪县| 镇平县| 册亨县| 福建省| 揭西县|