1. 集合Collection中存儲(chǔ)的如果是自定義類的對(duì)象,需要自定義類重寫哪個(gè)方法?為什么?
equals()方法。 contains() /remove()/retainsAll() ….
List:equals()方法
Set:(HashSet、LinkedHashSet為例):equals()、hashCode()
(TreeSet為例):Comparable:compareTo(Object obj);
Comparator:compare(Object o1,Object o2)
2. ArrayList,LinkedList,Vector三者的相同點(diǎn)與不同點(diǎn)?【面試題】
List Map Set
ArrayList、LinkedList與Vector的區(qū)別
ArrayList、LinkedList與Vector算是在面試用比較常見(jiàn)的知識(shí)點(diǎn)了。
2.1、ArrayList
ArrayList繼承AbstractList抽象父類,實(shí)現(xiàn)了List接口(可以進(jìn)行l(wèi)ist操作)、RandomAccess(可隨機(jī)訪問(wèn))、Cloneable(可拷貝)、Serializable(可序列化)
? 線程不安全
? 底層實(shí)現(xiàn)是數(shù)組ArrayList的默認(rèn)初始化容量是10,每次擴(kuò)容時(shí)候增加原先容量的一半,也就是變?yōu)?.5倍
2.2、LinkedList
LinkedList實(shí)現(xiàn)了List接口(可以進(jìn)行l(wèi)ist操作)、Deque接口(能夠當(dāng)做雙向端隊(duì)列使用)、Cloneable(可拷貝)、Serializable(可序列化)
? 線程不安全
? 底層實(shí)現(xiàn)是雙向鏈表,可以方便的從前/后進(jìn)行遍歷
2.3、Vector
Vector 是矢量隊(duì)列,它是JDK1.0版本添加的類。繼承于AbstractList,實(shí)現(xiàn)了List, RandomAccess, Cloneable這些接口
? 底層是數(shù)組,線程安全
? 所有方法都是同步,有性能損失
? Vector初始化length是10,每次擴(kuò)容時(shí)候增加原先容量的一倍,也就是變成原來(lái)的2倍
總的來(lái)說(shuō):查詢多用ArrayList,增刪多用LinkedList,多線程使用Vector
ArrayList
增刪慢不是絕對(duì)的,尾部增刪是ArrayList快,如果刪除的是中間位置的話,還是ArrayList要快
3. List 接口的常用方法有哪些?(增、刪、改、查、插、長(zhǎng)度、遍歷)
add(Object obj)
remove(Object obj)/remove(int index)
set(int index,Object obj)
get(int index)
add(int index,Object obj)
size()
使用Iterator;foreach;普通的for
4. 如何使用Iterator和增強(qiáng)for循環(huán)遍歷List。舉例說(shuō)明
? 1.使用迭代器Iterator的hasNext()和next()方法來(lái)遍歷集合
Iterator iterator = coll.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
System.out.println();
? 2.使用增強(qiáng)for循環(huán)來(lái)遍歷集合
//格式: for (數(shù)據(jù)類型 形參 :被遍歷集合) {}
for (Object obj : coll) {
System.out.println(obj);
}
5. Set存儲(chǔ)數(shù)據(jù)的特點(diǎn)是什么?常見(jiàn)的實(shí)現(xiàn)類有什么?說(shuō)明一下彼此的特點(diǎn)。
HashSet LinkedHashSet TreeSet
HashMap LinkedHashMap TreeMap
6.List、Map、Set的存儲(chǔ)特點(diǎn)?
List:以特定次序來(lái)持有元素,可有重復(fù)元素
Set:無(wú)法擁有重復(fù)元素,內(nèi)部排序
Map:保存key-value值,value可多值