不驕不躁
1.Vector和ArrayList的區(qū)別玄帕?
相同之處:
1.它們都是List
2.它們都實(shí)現(xiàn)了RandomAccess和Cloneable接口尝偎,都支持快速隨機(jī)訪問翔脱,能克隆自己可款。
3.它們都是通過數(shù)組實(shí)現(xiàn)的佛吓,本質(zhì)上都是動(dòng)態(tài)數(shù)組。
4.它們的默認(rèn)數(shù)組容量是10俱诸。
5.它們都支持Iterator和listIterator遍歷菠劝。
不同之處:
1.線程安全性不一樣。ArrayList是非線程安全的睁搭,而Vector是線程安全的赶诊; ArrayList適用于單線程,Vector適用于多線程园骆。
2.對(duì)序列化支持不同舔痪。ArrayList支持序列化,而Vector不支持锌唾。
3.構(gòu)造方法個(gè)數(shù)不同锄码。ArrayList有3個(gè)構(gòu)造方法,而Vector有4個(gè)構(gòu)造方法晌涕。Vector除類似的3個(gè)構(gòu)造方法之外滋捶,另外的一個(gè)構(gòu)造方法可以指定容量增加系數(shù)。
4.容量增加方式不同余黎。逐個(gè)添加元素時(shí)重窟,若ArrayList容量不足時(shí),“新的容量”=“(原始容量x3)/2 + 1”惧财。而Vector的容量增長與“增長系數(shù)有關(guān)”巡扇,若指定了“增長系數(shù)”,且“增長系數(shù)有效(即垮衷,大于0)”厅翔;那么,每次容量不足時(shí)帘靡,“新的容量”=“原始容量+增長系數(shù)”知给。若增長系數(shù)無效(即,小于/等于0),則“新的容量”=“原始容量 x 2”涩赢。
5.對(duì)Enumeration的支持不同戈次。Vector支持通過Enumeration去遍歷,而List不支持筒扒。
2.Set 和List的區(qū)別怯邪?
1.List和Set都是繼承自Collection接口。
2.List特點(diǎn):元素有放入順序花墩,元素可重復(fù) 悬秉,Set特點(diǎn):元素?zé)o放入順序,元素不可重復(fù)(注意:元素雖然無放入順序冰蘑,但是元素在set中的位置是有該元素的HashCode決定的和泌,其位置其實(shí)是固定的) 。
3.List接口有三個(gè)實(shí)現(xiàn)類:LinkedList祠肥,ArrayList武氓,Vector ,Set接口有兩個(gè)實(shí)現(xiàn)類:HashSet(底層由HashMap實(shí)現(xiàn))仇箱,LinkedHashSet县恕。
HashMap和HashSet的區(qū)別。
1.HashMap實(shí)現(xiàn)了Map接口剂桥,HashSet實(shí)現(xiàn)了Set接口忠烛。
2.HashMap儲(chǔ)存鍵值對(duì),HashSet僅僅存儲(chǔ)對(duì)象(且無重復(fù)對(duì)象)权逗。
3.HashMap使用put()方法將元素放入map中美尸,HashSet使用add()方法將元素放入set中。
4.HashMap中使用鍵對(duì)象來計(jì)算hashcode值旬迹,HashSet使用成員對(duì)象來計(jì)算hashcode值火惊。對(duì)于兩個(gè)對(duì)象來說hashcode可能相同,所以equals()方法用來判斷對(duì)象的相等性奔垦,如果兩個(gè)對(duì)象不同的話,那么返回false尸疆。
5.HashMap比較快椿猎,因?yàn)槭鞘褂梦ㄒ坏逆I來獲取對(duì)象;HashSet比HashMap來說更慢寿弱。
3.HashMap與HashTable的區(qū)別犯眠?
1.HashTable的方法是同步的,HashMap未經(jīng)同步症革,所以HashMap效率更高筐咧。
2.HashTable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。
3.HashTable有一個(gè)contains(Object value)量蕊,功能和containsValue(Object value)功能一樣铺罢,HashMap沒有contains方法。
4.HashTable使用Enumeration残炮,HashMap使用Iterator韭赘。
5.HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1势就。HashMap中hash數(shù)組的默認(rèn)大小是16泉瞻,而且一定是2的指數(shù)。
6.哈希值的使用不同苞冯,HashTable直接使用對(duì)象的hashCode袖牙。