java vector和list的區(qū)別 list和vector的區(qū)別?
list和vector的區(qū)別?ArrayList和vector的區(qū)別:這兩個(gè)類實(shí)現(xiàn)了list接口(list接口繼承了collection接口)。它們都是有序集合,即存儲(chǔ)在這兩個(gè)集合中的元素的位置是有序
list和vector的區(qū)別?
ArrayList和vector的區(qū)別:這兩個(gè)類實(shí)現(xiàn)了list接口(list接口繼承了collection接口)。它們都是有序集合,即存儲(chǔ)在這兩個(gè)集合中的元素的位置是有序的,這相當(dāng)于一個(gè)動(dòng)態(tài)數(shù)組。我們以后可以根據(jù)位置索引號(hào)來(lái)檢索一個(gè)元素,其中的數(shù)據(jù)允許重復(fù),然后討論ArrayList和vector的區(qū)別,主要包括兩個(gè)方面:(1)同步:vector是線程安全的,也就是說(shuō)它的方法是線程同步的,而ArrayList是線程不安全的,其方法是線程異步的。如果只有一個(gè)線程可以訪問(wèn)集合,最好使用ArrayList,因?yàn)樗豢紤]線程安全,效率會(huì)更高;如果多個(gè)線程可以訪問(wèn)集合,最好使用vector,因?yàn)槲覀儾恍枰约嚎紤]和編寫(xiě)線程安全代碼。(2) 數(shù)據(jù)增長(zhǎng):ArrayList和vector都有初始容量。當(dāng)存儲(chǔ)在其中的元素?cái)?shù)量超過(guò)容量時(shí),需要增加ArrayList和vector的存儲(chǔ)空間。每次需要增加存儲(chǔ)空間時(shí),不僅要添加一個(gè)存儲(chǔ)單元,還要添加多個(gè)存儲(chǔ)單元。每次增加的存儲(chǔ)單元數(shù)量在內(nèi)存空間利用率和程序效率之間要達(dá)到一定的平衡。Vector默認(rèn)增長(zhǎng)兩倍,而ArrayList的增長(zhǎng)策略沒(méi)有在文檔中指定(增長(zhǎng)是源代碼中原始值的1.5倍)。ArrayList和vector都可以設(shè)置初始空間大小,vector也可以設(shè)置增長(zhǎng)空間大小,但ArrayList沒(méi)有提供設(shè)置增長(zhǎng)空間的方法。結(jié)論:載體增加一倍,陣列列表增加0.5倍。cstl提供了三種序列容器:vector、deque和listdirector,其中的元素是按順序存儲(chǔ)的,所以隨機(jī)存取非??臁H欢?,插入和刪除的時(shí)間復(fù)雜度很高。當(dāng)向量初始化時(shí),有一個(gè)容量。如果元素?cái)?shù)量超過(guò)容量,向量將分配一個(gè)新空間,并將舊值復(fù)制到新空間。解釋原始空間也會(huì)花費(fèi)大量的時(shí)間,所以如果要?jiǎng)h除原始空間來(lái)知道元素的最大值,最好用reserve()函數(shù)來(lái)啟動(dòng)最大空間,這樣可以避免空間重新分配所造成的時(shí)間。deque的幾乎所有運(yùn)算都與vector相同。您可以在header_uFront()中添加和刪除多個(gè)push,pop_uFront()列表是一個(gè)雙鏈接列表。這些元素在記憶中是分散和不連續(xù)的。它使用左指針和右指針指向上一個(gè)元素和下一個(gè)元素。所以要?jiǎng)h除和添加,只需移動(dòng)指針,速度非???,但是因?yàn)樗遣贿B續(xù)的,要訪問(wèn)元素,只能遍歷序列。
list和vector的區(qū)別?
Vector和ArrayList在使用上非常相似,都可以用來(lái)表示一組數(shù)量可變的對(duì)象應(yīng)用程序,并且可以隨機(jī)訪問(wèn)元素。1Vector的方法是同步的和線程安全的,而ArrayList的方法不是。由于線程同步不可避免地影響性能,ArrayList的性能優(yōu)于vector。當(dāng)vector或ArrayList中的元素超過(guò)其初始大小時(shí),vector將使其容量加倍,而ArrayList只將其大小增加50%。這樣,ArrayList將節(jié)省內(nèi)存空間。
arrayList和vector的區(qū)別?
1、同步:vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是不安全的,不是同步的;2。數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),vector默認(rèn)增長(zhǎng)到原來(lái)的,ArrayList增長(zhǎng)到原來(lái)的一半;至于HashMap和hashtable,有三個(gè)方面。1、 歷史原因:hashtable基于舊的dictionary類,HashMap是java1.2引入的map接口的實(shí)現(xiàn);2。同步:hashtable是線程安全的,也就是同步的,而HashMap是不安全的,不是同步的。Value:只有HashMap可以將null值作為表項(xiàng)的鍵或值。
ArrayList和vector的區(qū)別有哪些?
1. 矢量連續(xù)存儲(chǔ)結(jié)構(gòu),每個(gè)元素在內(nèi)存中是連續(xù)的;它支持有效的隨機(jī)存取和最后的插入/刪除操作,但在其他位置的插入/刪除操作效率很低;它相當(dāng)于一個(gè)數(shù)組,但與數(shù)組的區(qū)別是:內(nèi)存空間的擴(kuò)展。
Vector支持存儲(chǔ),不指定Vector的大小,但數(shù)組的擴(kuò)展需要程序員編寫(xiě)。向量?jī)?nèi)存分配的原理如下:當(dāng)STL在內(nèi)部實(shí)現(xiàn)時(shí),它會(huì)為存儲(chǔ)分配非常大的內(nèi)存空間,即capacity()函數(shù)返回的大小。當(dāng)它超過(guò)分配的空間時(shí),它會(huì)分配一個(gè)內(nèi)存塊(VS6.0是VS2005的1.5倍)。因此,它給人的感覺(jué)是向量不能指定連續(xù)存儲(chǔ)器的大小。通常,這種默認(rèn)內(nèi)存分配可以完成大部分存儲(chǔ)。擴(kuò)展空間(無(wú)論多大)應(yīng)該做到以下幾點(diǎn):(1)配置一個(gè)新的空間;(2)將舊的元素逐個(gè)移動(dòng)到新的地址;(3)將原來(lái)的空間釋放回系統(tǒng)。注:矢量的數(shù)據(jù)排列和操作方式與數(shù)組非常相似。兩者之間唯一的區(qū)別是在空間使用上的靈活性。數(shù)組的擴(kuò)展空間應(yīng)由程序員自己編寫(xiě)。vector類定義了幾個(gè)構(gòu)造函數(shù)來(lái)定義和初始化vector對(duì)象:vector