您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“ArrayList和Vector的區(qū)別是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
21、ArrayList和Vector的區(qū)別
這兩個類都實現(xiàn)了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當(dāng)于一種動態(tài)的數(shù)組,我們以后可以按位置索引號取出某個元素,并且其中的數(shù)據(jù)是允許重復(fù)的,這是與HashSet之類的集合的最大不同處,HashSet之類的集合不可以按索引號去檢索其中的元素,也不允許有重復(fù)的元素。
ArrayList與Vector的區(qū)別主要包括兩個方面:.
(1)同步性:
Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。如果只有一個線程會訪問到集合,那最好是使用ArrayList,因為它不考慮線程安全,效率會高些;如果有多個線程會訪問到集合,那最好是使用Vector,因為不需要我們自己再去考慮和編寫線程安全的代碼。
(2)數(shù)據(jù)增長:
ArrayList與Vector都有一個初始的容量大小,當(dāng)存儲進它們里面的元素的個數(shù)超過了容量時,就需要增加ArrayList與Vector的存儲空間,每次要增加存儲空間時,不是只增加一個存儲單元,而是增加多個存儲單元,每次增加的存儲單元的個數(shù)在內(nèi)存空間利用與程序效率之間要取得一定的平衡。Vector默認增長為原來兩倍,而ArrayList的增長策略在文檔中沒有明確規(guī)定(從源代碼看到的是增長為原來的1.5倍)。ArrayList與Vector都可以設(shè)置初始的空間大小,Vector還可以設(shè)置增長的空間大小,而ArrayList沒有提供設(shè)置增長空間的方法。
總結(jié):即Vector增長原來的一倍,ArrayList增加原來的0.5倍。
22、HashMap和Hashtable的區(qū)別
HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,在只有一個線程訪問的情況下,效率要高于Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap就必須為之提供同步。
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現(xiàn)
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
23、List和 Map區(qū)別?
一個是存儲單列數(shù)據(jù)的集合,另一個是存儲鍵和值這樣的雙列數(shù)據(jù)的集合,List中存儲的數(shù)據(jù)是有順序,并且允許重復(fù);Map中存儲的數(shù)據(jù)是沒有順序的,其鍵是不能重復(fù)的,它的值是可以有重復(fù)的。
24、List,Set, Map是否繼承自Collection接口?
List,Set是,Map不是
25、List、Map、Set三個接口,存取元素時,各有什么特點?
(這樣的題比較考水平,兩個方面的水平:一是要真正明白這些內(nèi)容,二是要有較強的總結(jié)和表述能力。)
首先,List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,即不能有兩個相等(注意,不是僅僅是相同)的對象,即假設(shè)Set集合中有了一個A對象,現(xiàn)在我要向Set集合再存入一個B對象,但B對象與A對象equals相等,則B對象存儲不進去,所以,Set集合的add方法有一個boolean的返回值,當(dāng)集合中沒有某個元素,此時add方法可成功加入該元素時,則返回true,當(dāng)集合含有與某個元素equals相等的元素時,此時add方法無法加入該元素,返回結(jié)果為false。Set取元素時,不能細說要取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。
List表示有先后順序的集合,注意,不是那種按年齡、按大小、按價格之類的排序。當(dāng)我們多次調(diào)用add(Obje)方法時,每次加入的對象就像火車站買票有排隊順序一樣,按先來后到的順序排序。有時候,也可以插隊,即調(diào)用add(intindex,Obj e)方法,就可以指定當(dāng)前對象在集合中的存放位置。一個對象可以被反復(fù)存儲進List中,每調(diào)用一次add方法,這個對象就被插入進集合中一次,其實,并不是把這個對象本身存儲進了集合中,而是在集合中用一個索引變量指向這個對象,當(dāng)這個對象被add多次時,即相當(dāng)于集合中有多個索引指向了這個對象,如圖x所示。List除了可以用Iterator接口取得所有的元素,再逐一遍歷各個元素之外,還可以調(diào)用get(index i)來明確說明取第幾個。
Map與List和Set不同,它是雙列的集合,其中有put方法,定義如下:put(obj key,obj value),每次存儲時,要存儲一對key/value,不能存儲重復(fù)的key,這個重復(fù)的規(guī)則也是按equals比較相等。取則可以根據(jù)key獲得相應(yīng)的value,即get(Object key)返回值為key所對應(yīng)的value。另外,也可以獲得所有的key的結(jié)合,還可以獲得所有的value的結(jié)合,還可以獲得key和value組合成的Map.Entry對象的集合。
List以特定次序來持有元素,可有重復(fù)元素。Set無法擁有重復(fù)元素,內(nèi)部排序。Map保存key-value值,value可多值。
26、說出ArrayList,Vector,LinkedList的存儲性能和特性
ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差。而LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進行前向或后向遍歷,索引就變慢了,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。
LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList可以被當(dāng)作堆棧和隊列來使用。
27、去掉一個Vector集合中重復(fù)的元素
Vector newVector = new Vector();
For (int i=0;i<vector.size();i++)
{
Object obj = vector.get(i);
if(!newVector.contains(obj);
newVector.add(obj);
}
還有一種簡單的方式,利用了Set不允許重復(fù)元素:
HashSetset = new HashSet(vector);
28、Collection和Collections的區(qū)別。
Collection是集合類的上級接口,繼承他的接口主要有Set和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作。
29、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢?是用==還是equals()?它們有何區(qū)別?
Set里的元素是不能重復(fù)的,元素重復(fù)與否是使用equals()方法進行判斷的。
==和equal區(qū)別也是考爛了的題,這里說一下:
==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲的數(shù)值是否相同,要比較兩個基本類型的數(shù)據(jù)或兩個引用變量是否相等,只能用==操作符。
equals方法是用于比較兩個獨立對象的內(nèi)容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。
比如:兩條new語句創(chuàng)建了兩個對象,然后用a/b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數(shù)值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內(nèi)容是相同的,所以,表達式a.equals(b)將返回true。
30、你所知道的集合類都有哪些?主要方法?
最常用的集合類是 List 和 Map。 List的具體實現(xiàn)包括 ArrayList和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操作任何類型對象的元素列表。 List適用于按數(shù)值索引訪問元素的情形。
Map 提供了一個更通用的元素存儲方法。 Map集合類用于存儲元素對(稱作"鍵"和"值"),其中每個鍵映射到一個值。
它們都有增刪改查的方法。
對于set,大概的方法是add,remove, contains等
對于map,大概的方法就是put,remove,contains等
List類會有g(shù)et(int index)這樣的方法,因為它可以按順序取元素,而set類中沒有g(shù)et(int index)這樣的方法。List和set都可以迭代出所有元素,迭代時先要得到一個iterator對象,所以,set和list類都有一個iterator方法,用于返回那個iterator對象。map可以返回三個集合,一個是返回所有的key的集合,另外一個返回的是所有value的集合,再一個返回的key和value組合成的EntrySet對象的集合,map也有g(shù)et方法,參數(shù)是key,返回值是key對應(yīng)的value,這個自由發(fā)揮,也不是考記方法的能力,這些編程過程中會有提示,結(jié)合他們?nèi)叩牟煌f一下用法就行。
“ArrayList和Vector的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。