[集合的特點(diǎn)和實(shí)現(xiàn)](http://blog.csdn.net/qq_25868207/article/details/55259978)
一、認(rèn)識(shí)集合類
集合框架接口:Collection、List、Set、Map、Iterator


其中分為:list:鏈表、數(shù)組列表;set:散列集、樹(shù)集;map:映射;隊(duì)列
鏈表:LinkedList,一種可以在任何位置進(jìn)行高效插入和刪除操作的有序序列
數(shù)組列表:ArraysList,一種可以動(dòng)態(tài)增長(zhǎng)縮減的索引序列
散列集:HashSet,一種沒(méi)有重復(fù)元素的無(wú)序集合
樹(shù)集:TreeSet,一種有序集(沒(méi)有重復(fù)元素)
HashMap:一種鍵值存儲(chǔ)關(guān)聯(lián)的映射表
TreeMap:一種鍵值有序排列的映射表
二、 一些需要注意的問(wèn)題
1、List 和Set都是繼承Collection接口的,map不是
2、List特點(diǎn):元素有存放順序,元素可重復(fù);Set特點(diǎn):元素存放沒(méi)有順序,元素不可重復(fù)(注意:元素雖然無(wú)序放入,但是元素在set中的位置是由該元素的HashCode決定的,其位置其實(shí)是固定的,加入set的Object必須定義equals()方法,另外list支持for循環(huán),就是通過(guò)下標(biāo)來(lái)遍歷,也可以使用迭代器)
3、set和list相比:
set:檢索元素效率低,刪除和插入效率高,插入和刪除不會(huì)引起元素位置的改變
list :和數(shù)組類似,list可以動(dòng)態(tài)增長(zhǎng),查找元素效率高,插入刪除元素效率低,因?yàn)闀?huì)引起其他元素位置改變
4、線程安全和非線程安全
安全:HashTable、StringBuffer
非安全:LinkedList、ArrayList、HashSet、HashMap、StringBuilder
●Array和ArrayList的區(qū)別:
Array可包含基本數(shù)據(jù)類型和對(duì)象類型,ArrayList只能包含對(duì)象類型;
array大小是固定的,ArrayList的大小是動(dòng)態(tài)變化的。
●ArrayList和LinkedList的區(qū)別:
各自特性:
__ArrayList : 是一由連續(xù)的內(nèi)存塊組成的數(shù)組,范圍大小可變的,當(dāng)不夠時(shí)增加為原來(lái)1.5倍大小,數(shù)組。 :調(diào)用trimToSize方法,使得存儲(chǔ)區(qū)域的大小調(diào)整為當(dāng)前元素?cái)?shù)量所需要的空間大小,垃圾回收器將會(huì)回收多余存儲(chǔ)空間。
__LinkedList : 是由隨機(jī)內(nèi)存塊通過(guò)指針連接起來(lái)的,范圍大小可變的,當(dāng)不夠時(shí)增加為原來(lái)2倍大小,一個(gè)雙向鏈表,
結(jié)論一 : ArrayList集合訪問(wèn)查找比LinkedList集合速度快,
結(jié)論二 : LinkedList集合增刪元素比ArrayList集合速度快,后者會(huì)引起其他元素位置的改變
●HashMap和Hashtable的區(qū)別:
兩者都實(shí)現(xiàn)了map接口,HashMap允許鍵和值為null,Hashtable不允許鍵或者值為Null.
Hashtable是同步的,而HashMap是異步的。因此前者更適合于多線程,后者適用于單線程環(huán)境。
●HashSet和TreeSet區(qū)別:
HashSet由hash表來(lái)實(shí)現(xiàn)的,因此元素時(shí)無(wú)序的,增加,刪除操作的時(shí)間復(fù)雜度是常數(shù)O(1).
TreeSet是由樹(shù)形的結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,里面元素時(shí)有序的。刪除增加操作的時(shí)間復(fù)雜度是O(logn).
●HashMap中的hashCode()和equals()方法的重要性:
當(dāng)進(jìn)行增加操作時(shí),hashCode()用來(lái)定位要存放的位置,如果該位置上存在數(shù)據(jù)了,那么久通過(guò)equals()用來(lái)判斷數(shù)據(jù)是否相等。