麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Vector,ArrayList哪一個(gè)更好

2019-11-18 14:30:32
字體:
供稿:網(wǎng)友

  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是不可同步化的,所以也不是線程安全的。假如你知道了這些的話,你就會(huì)發(fā)現(xiàn),Vector的同步會(huì)讓它在性能發(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ù)級(jí)的時(shí)間(O(1))內(nèi)完成。但是從一個(gè)其他的位置增加和刪除一個(gè)元素就顯得頗為費(fèi)時(shí),差不多需要的時(shí)間為O(n-i),這里的n代表元素個(gè)數(shù),i代表要增加和刪除的元素所在的位置。這些操作需花費(fèi)更多的時(shí)間,因?yàn)槟阈枰€(gè)移動(dòng)i和更高位置的元素。那么,以上這些到底說明了什么呢?
  
  這意味著,假如你取得一個(gè)元素,或者從數(shù)組末尾增加或刪除一個(gè)元素的話,隨便你使用Vector和ArrayList。假如你想要對數(shù)組內(nèi)容做其他操作的話,那么就為自己好另一個(gè)容器吧。比喻說,LinkedList可以在常數(shù)級(jí)時(shí)間(O(1))內(nèi)為任意一個(gè)位置的元素增加和刪除。但是,取得一個(gè)元素,會(huì)稍微慢一點(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í)間。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 玖草在线资源 | 国产亚洲在 | 日本不卡中文字幕 | 91久久免费 | 久久宗合色| 日本在线播放一区二区三区 | 一级电影免费看 | 国产精品久久久久影院老司 | 国产日韩免费观看 | 1级黄色毛片| 深夜视频福利 | 特级黄色影院 | 日韩在线毛片 | 草久免费| 美女视频网站黄色 | 播色网 | 欧美成人精品一区二区 | 久久视频精品 | 羞羞视频免费视频欧美 | 亚洲乱操 | 成人一区三区 | 91www成人久久 | 中文字幕在线播放第一页 | 欧美在线观看视频网站 | 双性帝王调教跪撅打屁股 | 免费国产成人高清在线看软件 | 久久人人爽人人爽人人片av高清 | 国产成人观看 | 伊人午夜 | 成人做爰www免费看 欧美精品免费一区二区三区 | 黄色免费播放网站 | 免费男女视频 | 欧美一a一片一级一片 | 亚洲小视频在线观看,com | 久久无毛 | 午夜丰满少妇高清毛片1000部 | a网站在线 | 韩国精品视频在线观看 | 久久91久久 | 色诱亚洲精品久久久久久 | 免费男女视频 |