集合中元素的刪除元素要左移,集合中元素添加集合長(zhǎng)度要擴(kuò)充并且元素要右移
集合的層次關(guān)系
?Collection (子集和? ?List和Set)
????????????List:有序可重復(fù)?
?????????????????????ArrayList?
?????????????????????LinkedList?
?????????????????????Vector
????????????Set:無序不可重復(fù)(無序是和輸入的順序無關(guān)享完,默認(rèn)順序是從小到大)? ? ? ? ? ? ? ? ? ? ? ? ?HashSet?
?????????????????????TreeSet?
?查詢快污筷, 增刪慢的原理:
? ? ? ? ? ? 查詢快:
????????????????ArrayList底層維護(hù)是一個(gè)Object類型的數(shù)組融涣,可以完成使用數(shù)組的下標(biāo)機(jī)制來訪問數(shù)據(jù),這種訪問形式是非常快的
????????????增加慢:
????????????????是因?yàn)樵谔砑訑?shù)據(jù)的時(shí)候吹菱,有可能導(dǎo)致ArrayList底層的Object數(shù)組的元素個(gè)數(shù)不夠用,那么會(huì)調(diào)用數(shù)組的擴(kuò)容方法 grow于游,而擴(kuò)容方法毁葱,是創(chuàng)建了一個(gè)新的數(shù)組,數(shù)組的元素個(gè)數(shù)大于是老數(shù)組的1.5倍贰剥,這里會(huì)利用一些方法倾剿,把老數(shù)組里面的元素完完整整的拷貝的到新數(shù)組,這個(gè)拷貝過程很占用時(shí)間和內(nèi)存
????????????刪除慢:
????????????????因?yàn)閯h除某一個(gè)元素蚌成,會(huì)導(dǎo)致數(shù)組中該元素之后的數(shù)據(jù)前痘,做一個(gè)整體的左移,這里也是一個(gè)數(shù)組的拷貝過程担忧,整個(gè)過程非常浪費(fèi)時(shí)間
面試題:
1.如果調(diào)用了ArrayList的無參構(gòu)造方法芹缔,那么請(qǐng)問底層維護(hù)的Object數(shù)組默認(rèn)的元素個(gè)數(shù)是多少?如果是調(diào)用這個(gè)方法呢newArrayList(8);答:默認(rèn)元素個(gè)數(shù)為10瓶盛,如果調(diào)用了newArrayList(8)Object數(shù)組最欠,元素個(gè)數(shù)為8
2.ArrayList是一個(gè)可以自增長(zhǎng)的空間示罗,請(qǐng)問,增長(zhǎng)的原理是什么芝硬?增長(zhǎng)的長(zhǎng)度是多少蚜点?ArrayList底層維護(hù)的是一個(gè)Object數(shù)組,默認(rèn)元素為10拌阴,如果添加元素時(shí)绍绘,當(dāng)前需求的元素空間超出了Object數(shù)組的元素個(gè)數(shù),會(huì)調(diào)用底層的grow迟赃,進(jìn)行數(shù)組元素的擴(kuò)容和拷貝擴(kuò)容量是大約1.5倍
????????????新元素個(gè)數(shù) = 老元素個(gè)數(shù) + (老元素個(gè)數(shù) >>1);newCapacity = oldCapacity + (olcCapacity >>1);