[集合的特點和實現(xiàn)](http://blog.csdn.net/qq_25868207/article/details/55259978)
一孕锄、認識集合類
集合框架接口:Collection、List畸肆、Set、Map轴脐、Iterator
其中分為:list:鏈表踪旷、數(shù)組列表;set:散列集令野、樹集徽级;map:映射气破;隊列
鏈表:LinkedList,一種可以在任何位置進行高效插入和刪除操作的有序序列
數(shù)組列表:ArraysList,一種可以動態(tài)增長縮減的索引序列
散列集:HashSet,一種沒有重復(fù)元素的無序集合
樹集:TreeSet餐抢,一種有序集(沒有重復(fù)元素)
HashMap:一種鍵值存儲關(guān)聯(lián)的映射表
TreeMap:一種鍵值有序排列的映射表
二、 一些需要注意的問題
1旷痕、List 和Set都是繼承Collection接口的,map不是
2、List特點:元素有存放順序欺抗,元素可重復(fù);Set特點:元素存放沒有順序贸人,元素不可重復(fù)(注意:元素雖然無序放入佃声,但是元素在set中的位置是由該元素的HashCode決定的艺智,其位置其實是固定的圾亏,加入set的Object必須定義equals()方法封拧,另外list支持for循環(huán)夭问,就是通過下標(biāo)來遍歷,也可以使用迭代器)
3甲喝、set和list相比:
set:檢索元素效率低,刪除和插入效率高糠溜,插入和刪除不會引起元素位置的改變
list :和數(shù)組類似直撤,list可以動態(tài)增長非竿,查找元素效率高谋竖,插入刪除元素效率低,因為會引起其他元素位置改變
4锤悄、線程安全和非線程安全
安全:HashTable嘉抒、StringBuffer
非安全:LinkedList、ArrayList些侍、HashSet、HashMap岗宣、StringBuilder
●Array和ArrayList的區(qū)別:
Array可包含基本數(shù)據(jù)類型和對象類型,ArrayList只能包含對象類型胁住;
array大小是固定的,ArrayList的大小是動態(tài)變化的措嵌。
●ArrayList和LinkedList的區(qū)別:
各自特性:
__ArrayList : 是一由連續(xù)的內(nèi)存塊組成的數(shù)組芦缰,范圍大小可變的枫慷,當(dāng)不夠時增加為原來1.5倍大小,數(shù)組让蕾。 :調(diào)用trimToSize方法,使得存儲區(qū)域的大小調(diào)整為當(dāng)前元素數(shù)量所需要的空間大小笋婿,垃圾回收器將會回收多余存儲空間顿颅。
__LinkedList : 是由隨機內(nèi)存塊通過指針連接起來的,范圍大小可變的粱腻,當(dāng)不夠時增加為原來2倍大小,一個雙向鏈表,
結(jié)論一 : ArrayList集合訪問查找比LinkedList集合速度快绍些,
結(jié)論二 : LinkedList集合增刪元素比ArrayList集合速度快,后者會引起其他元素位置的改變
●HashMap和Hashtable的區(qū)別:
兩者都實現(xiàn)了map接口,HashMap允許鍵和值為null,Hashtable不允許鍵或者值為Null.
Hashtable是同步的啸澡,而HashMap是異步的氮帐。因此前者更適合于多線程,后者適用于單線程環(huán)境上沐。
●HashSet和TreeSet區(qū)別:
HashSet由hash表來實現(xiàn)的,因此元素時無序的冰更,增加昂勒,刪除操作的時間復(fù)雜度是常數(shù)O(1).
TreeSet是由樹形的結(jié)構(gòu)來實現(xiàn)的,里面元素時有序的戈盈。刪除增加操作的時間復(fù)雜度是O(logn).
●HashMap中的hashCode()和equals()方法的重要性:
當(dāng)進行增加操作時,hashCode()用來定位要存放的位置归斤,如果該位置上存在數(shù)據(jù)了刁岸,那么久通過equals()用來判斷數(shù)據(jù)是否相等脏里。