最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Vector和ArrayList區(qū)別及比較

 更新時(shí)間:2015年03月28日 10:03:26   投稿:junjie  
這篇文章主要介紹了Java中的Vector和ArrayList區(qū)別及比較,本文從API、同步、數(shù)據(jù)增長(zhǎng)、使用模式4個(gè)方面總結(jié)了它們之間的不同之處,需要的朋友可以參考下

Vector  和  ArrayList 比較

有時(shí)用Vector更好一點(diǎn),有時(shí)用ArrayList更好一點(diǎn),不能準(zhǔn)確容易的給出答案,因?yàn)橐暰唧w情況而定,有四個(gè)主要考慮的因素:

1:API
2: 同步(synchronization)
3:數(shù)據(jù)增長(zhǎng)(Data  growth)
4:使用模式(Usage  pattern)

下面分別意義探討:

1:API

在Ken Arnold, James Gosling, and David Holmes 的 Java 程序語(yǔ)言的描述中,Vector和ArrayList是類比設(shè)計(jì)的,從API 的角度來(lái)看,兩個(gè)類有很多相似性,但是兩個(gè)類也有一些不同。

2:同步(Synchronization)

從同步性的角度考慮 :  Vector是同步的,一些訪問(wèn)Vector的內(nèi)容的方法是線程安全的,而ArrayList是非同步的,訪問(wèn)ArrayList的內(nèi)容的方法是線程不安全的,因?yàn)橛羞@個(gè)不同,使用synchronized關(guān)鍵字修飾的,將會(huì)在性能上有所下降,因此如果你不需要一個(gè)線程安全的集合,使用ArrayList。不用花費(fèi)不必要的synchronization性能開銷。

3:數(shù)據(jù)增長(zhǎng)(Data   growth)

從內(nèi)部的數(shù)據(jù)結(jié)構(gòu)來(lái)看,ArrayList 和 Vector都是使用  數(shù)組(Array)的模式存放內(nèi)容,你需要在程序設(shè)計(jì)中小心這個(gè)本質(zhì),當(dāng)在 ArrayList和 Vector中插入數(shù)據(jù)時(shí),如果ArrayList或 Vector的對(duì)象存儲(chǔ)超出了對(duì)應(yīng)的空間(即內(nèi)部數(shù)組長(zhǎng)度)。對(duì)應(yīng)的ArrayList或 Vector將會(huì)擴(kuò)充它們的內(nèi)部的數(shù)組。 Vector默認(rèn)擴(kuò)充內(nèi)部數(shù)組的一倍,就是相當(dāng)于兩個(gè)以前的數(shù)組的大小,而ArrayList僅僅增加50%的大小,根據(jù)你使用哪個(gè)類來(lái)確定增加一個(gè)元素的性能影響,最好的方式就是設(shè)置對(duì)象的初始化容量為需要的最大容量,這樣能夠避免以后插入元素后的自增長(zhǎng),(自增長(zhǎng)會(huì)涉及到數(shù)組內(nèi)部元素的復(fù)制到新創(chuàng)建的數(shù)組中),如果你不知道數(shù)據(jù)將增長(zhǎng)到多大,但是你知道數(shù)據(jù)增長(zhǎng)的速率,Vectory能夠擁有輕微的優(yōu)勢(shì),因?yàn)槟隳軌蛟O(shè)置增長(zhǎng)的值。

至于為什么要把 Vector設(shè)置為同步和自增長(zhǎng)為自身大小的一倍而ArrayList設(shè)置為非同步自增長(zhǎng)為自身大小的一半:

八卦一下:設(shè)置為同步說(shuō)明數(shù)據(jù)增長(zhǎng)比較激烈,就是增長(zhǎng)速率和頻率較大,如果設(shè)置為一半,很快數(shù)組又滿了,所以設(shè)置為一倍。

而ArrayList相應(yīng)的 增長(zhǎng)速率慢,設(shè)置為不同步,不容易出現(xiàn)多線程并發(fā)問(wèn)題。
八卦只是個(gè)人理解,歡迎拍磚。

4:使用模式(usage pattern)

ArrayList和Vector都是比較好的在檢索特定位置 的元素的時(shí)候以及在集合的末尾增加和移除元素,所有以上的操作都是在O(1)的線性時(shí)間,但是如果增加和移除一些別的位置的元素(非最末尾位置)需要更昂貴的線性時(shí)間開銷為O(n-i),n代表了元素的總個(gè)數(shù),i代表了插入或移除的索引位置,這些操作代價(jià)更大,因?yàn)椴坏貌灰苿?dòng)索引i后端所有的元素,這意味著什么呢?

這意味著你先查找到索引為以及 i 以后 的元素,然后在數(shù)組的末尾插入和移除該元素。如果你想做插入或刪除,可以考慮一些別的集合類,例如:LinkedList能夠增加或移除一些位置的元素在常量時(shí)間O(1)內(nèi),但是索引元素的位置比較慢,需要O(i)的時(shí)間開銷,i 是需要的元素的索引,遍歷ArrayList是很容易的,因?yàn)槟隳軌蚝?jiǎn)單的使用索引代替創(chuàng)建一個(gè)迭代器,LinkedList也為每一個(gè)插入的元素創(chuàng)建一個(gè)內(nèi)部的對(duì)象,因此你必須意識(shí)到額外的垃圾被創(chuàng)建。

最后聲明:你能夠使用最普通的數(shù)組來(lái)代替Vector或者ArrayList,尤其是因?yàn)闃?biāo)準(zhǔn)代碼的性能,使用數(shù)組能夠避免同步(synchronization),額外的方法調(diào)用,最適度的調(diào)整大小,你僅僅需要花費(fèi)額外的開發(fā)時(shí)間。通過(guò)array能夠?yàn)槟某绦蛄可矶ㄗ鲂枰募稀?/p>

相關(guān)文章

  • java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號(hào)生成唯一的解決方案

    java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號(hào)生成唯一的解決方案

    這篇文章主要介紹了java web在高并發(fā)和分布式下實(shí)現(xiàn)訂單號(hào)生成唯一的解決方案,需要的朋友可以參考下
    2017-11-11
  • Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹

    Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹

    大家好,本篇文章主要講的是Mybatis中mapper.xml實(shí)現(xiàn)熱加載介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • SpringBoot整合MongoDB完整實(shí)例代碼

    SpringBoot整合MongoDB完整實(shí)例代碼

    本文主要介紹了SpringBoot整合MongoDB完整實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 詳解JAVA Stream流

    詳解JAVA Stream流

    這篇文章主要介紹了JAVA Stream流的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • java數(shù)據(jù)結(jié)構(gòu)之希爾排序

    java數(shù)據(jù)結(jié)構(gòu)之希爾排序

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)之希爾排序的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java?中的?clone(?)?和?new哪個(gè)效率更高

    Java?中的?clone(?)?和?new哪個(gè)效率更高

    很多朋友不太清楚clone()和new那個(gè)更快?針對(duì)這個(gè)問(wèn)題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個(gè)效率更高的問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • POI導(dǎo)出Excel報(bào)錯(cuò)No such file or directory的解決方法

    POI導(dǎo)出Excel報(bào)錯(cuò)No such file or directory的解決方法

    這篇文章主要為大家詳細(xì)介紹了POI導(dǎo)出Excel報(bào)錯(cuò)No such file or directory的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Maven pom的distributionManagement配置方式

    Maven pom的distributionManagement配置方式

    文章主要介紹了Maven的distributionManagement配置方式,以及它的作用、配置方法和重要性,distributionManagement用于指定構(gòu)件的發(fā)布位置,包括下載URL、狀態(tài)等,文章還詳細(xì)解釋了如何配置repository和snapshotRepository,以及它們的用途和區(qū)別
    2025-01-01
  • Spring運(yùn)行環(huán)境Environment的解析

    Spring運(yùn)行環(huán)境Environment的解析

    本文主要介紹了Spring運(yùn)行環(huán)境Environment的解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • @PathParam和@QueryParam區(qū)別簡(jiǎn)析

    @PathParam和@QueryParam區(qū)別簡(jiǎn)析

    這篇文章主要介紹了@PathParam和@QueryParam區(qū)別,分享了相關(guān)實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

东丽区| 木里| 浦县| 宁陕县| 伊宁县| 长垣县| 建瓯市| 大安市| 翼城县| 安仁县| 开封市| 天长市| 吴旗县| 合川市| 阿尔山市| 兴文县| 蚌埠市| 盐池县| 卢湾区| 鹤峰县| 禹州市| 永州市| 同德县| 剑河县| 曲麻莱县| 大港区| 敦化市| 徐州市| 泗水县| 曲阜市| 富阳市| 峨边| 工布江达县| 招远市| 天台县| 玛曲县| 哈密市| 比如县| 广德县| 昭通市| 长汀县|