Java基礎(chǔ)部分
1.集合
ArrayList和LinkedList的區(qū)別:
1)ArrayList是基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)眶掌,LinkerList是基于鏈表的數(shù)據(jù)結(jié)構(gòu)派桩;
2)隨機(jī)訪問(wèn)的get和set地淀。ArrayList優(yōu)于LinkedList梧疲,LinkedList操作需要移動(dòng)指針擦耀;
3)新增,刪除add和remove。LinkedList優(yōu)于ArrayList榕酒,ArrayList需要移動(dòng)數(shù)據(jù)胚膊,主要是生成一個(gè)新的數(shù)組故俐,設(shè)計(jì)到數(shù)據(jù)的拷貝。
集合的區(qū)別
1)Linked 改快讀慢
2)Array 讀快改慢
3)Hash 兩者之間
4)Collection是集合接口
|————Set子接口:無(wú)序紊婉,不允許重復(fù)药版。
|————List子接口:有序,可以有重復(fù)元素喻犁。
Set和List對(duì)比:
Set:檢索元素效率低下槽片,刪除和插入效率高,插入和刪除不會(huì)引起元素位置改變株汉。
List:和數(shù)組類(lèi)似筐乳,List可以動(dòng)態(tài)增長(zhǎng),查找元素效率高乔妈,插入刪除元素效率低,因?yàn)闀?huì)引起其他元素位置改變氓皱。
Set和List具體子類(lèi):
Set
|————HashSet:以哈希表的形式存放元素路召,插入刪除速度很快。
List
|————ArrayList:動(dòng)態(tài)數(shù)組 |————LinkedList:鏈表波材、隊(duì)列股淡、堆棧。
Array和java.util.Vector
Vector是一種老的動(dòng)態(tài)數(shù)組廷区,是線(xiàn)程同步的唯灵,效率很低,一般不贊成使用隙轻。(synchronized 是 java語(yǔ)言的關(guān)鍵字埠帕,當(dāng)它用來(lái)修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線(xiàn)程執(zhí)行該段代碼玖绿。)
HashSet
HashSet不允許集合中有重復(fù)值敛瓷,在將對(duì)象存儲(chǔ)在HashSet前,要先確保對(duì)象重寫(xiě)equals()和hashCode()方法斑匪,這樣才能比較對(duì)象的值是否相等呐籽,以確保set中沒(méi)有儲(chǔ)存相等的對(duì)象。如果沒(méi)有重寫(xiě)這兩個(gè)方法蚀瘸,會(huì)使用這個(gè)方法的默認(rèn)實(shí)現(xiàn)狡蝶。
public boolean add(Object o)方法用來(lái)在Set中添加元素,當(dāng)元素值重復(fù)時(shí)則會(huì)立即返回false贮勃,如果成功添加的話(huà)會(huì)返回true贪惹。
HashMap
HashMap對(duì)鍵值對(duì)進(jìn)行映射。Map中不允許重復(fù)的鍵衙猪。Map接口有兩個(gè)基本的實(shí)現(xiàn)馍乙,HashMap和TreeMap布近。TreeMap保存了對(duì)象的排列次序,而HashMap則不能丝格。HashMap允許鍵和值為null撑瞧。HashMap是非synchronized的,但collection框架提供方法能保證HashMap synchronized显蝌,這樣多個(gè)線(xiàn)程同時(shí)訪問(wèn)HashMap時(shí)预伺,能保證只有一個(gè)線(xiàn)程更改Map。
HashMap底層用哈希算法實(shí)現(xiàn),HashSet底層是通過(guò)HashMap實(shí)現(xiàn)的.