ArrayList
ArrayList的底層數(shù)據(jù)結(jié)構(gòu)是動態(tài)數(shù)組毙玻,他是先確定ArrayList的容量借浊,若當前容量不足以容納當前的元素個數(shù)時版保,然后通過Arrays.copyOf()重新創(chuàng)建一個數(shù)組拐揭,將原來的數(shù)組copy進去娶吞,設置新的容量玄窝,然后賦值給elementData牵寺。
適合 查找或者遍歷,如果有大量的插入刪除操作盡量避免使用它恩脂。
LinkedList
ListedList基于雙端鏈表帽氓,添加/刪除元素只會影響周圍的兩個節(jié)點,開銷很低俩块;只能順序遍歷黎休,無法按照索引獲得元素,因此查詢效率不高玉凯;沒有固定容量势腮,不需要擴容;需要更多的內(nèi)存漫仆, 每個節(jié)點中需要多存儲前后節(jié)點的信息捎拯,占用空間更多些。
怎樣將一個數(shù)組轉(zhuǎn)成List盲厌,有什么方法玄渗?
①數(shù)組轉(zhuǎn)list,可以使用Arrays.asList(數(shù)組)
②List轉(zhuǎn)數(shù)組狸眼,使用list.toArray()
HashSet藤树、TreeSet、LinkedHashSet區(qū)別拓萌?
可以從集合的使用場合回答面試官
①.需要速度快的集合岁钓,使用HashSet
②.需要集合有排序功能,使用TreeSet
③.需要按照插入的順序存儲集合,使用LinkedHashSet
HashMap和Hashtable的區(qū)別:
? ? 1屡限、hashMap不是線程安全的品嚣,而hashtable是線程安全的
? ? 2、hashMap允許空的值和空的值钧大,而hashtable則不允許翰撑。
? 3、hashMap的性能要優(yōu)于hashtable.