一、常見的集合有哪些?
Collection接口和Map接口是全部集合框架的父接口
Collection接口的子接口包括:Set接口和List接口
Map接口的實現類主要有:HashMap、TreeMap、HashTable、ConcurrentHashMap以及Properties等
Set接口的主要實現類有:HashSet、TreeSet、LinkedHashSet等
List接口的主要實現類有:ArrayList、LinkedList、Stack、Vector等java
二、HashMap和HashTable的區別?
HashMap線程不安全,容許將Null值做爲key
HashTable線程安全,使用了synchronized關鍵字修飾,不容許將null值設爲key數組
三、HashMap的底層實現?
在jdk8以前,其底層實現是數組+鏈表,jdk8以後使用了數組+鏈表+紅黑樹實現安全
四、ConcurrentHashMap與HashTable的區別?
ConcurrentHashMap結合了HashMap和HashTable二者的優點,HashMap線程不安全,HashTable是線程安全的,可是hashTable在每次同步執行時都要鎖住整個結構,而ConcurrentHashMap鎖的方式是稍微細粒度的,ConcurrentHashMap將hash表分爲16個桶,諸如get、put、remove等經常使用操做只鎖住當前須要用到的桶。框架
五、List和Set的區別?
List表明着有序且能夠重複的集合
Set表明着無序的且不能夠重複的集合spa
六、List、Set、Map的初始容量和加載因子?
ArrayList的初始容量是10,加載因子爲0.5,擴容增量是原來容量的1.5倍,一次擴容後長度爲15
Vector的初始容量是10,加載因子爲1,擴容增量是原來容量的2倍,一次擴容後長度爲20
HashMap和HashSet的初始容量是16,加載因子爲0.75,擴容增量是元容量的2倍,一次擴容後長度爲32線程
七、Java集合的快速失敗機制「fail-fast」
快速失敗機制是java集合的一種錯誤檢測機制,當多個線程對集合進行結構上的改變操做時,就有可能觸發fail-fast機制
例如:假設存在兩個線程(線程A、線程B),線程A經過Iterator在遍歷集合C中的元素,在這個時候線程B修改了集合C的結構(是結構上面的修改,而不是簡單的修改集合元素的內容),那麼這個時候程序就會拋出ConcurrentModificationException異常,從而觸發fail-fast機制。
緣由:迭代器在遍歷是直接訪問集合中的內容,而且在遍歷過程當中使用一個modCount變量,集合在遍歷期間若是結構發生變化,就會改變modCount的值。每當迭代器使用hasNext/next()遍歷下一個元素以前,都會檢查modCount變量是否爲expectedmodCount值,若是一致就返回遍歷,若是不一致就拋出異常,終止遍歷。接口
八、ArrayList和Vector的區別
vector是線程安全的,使用synchornized關鍵字修飾實現同步,ArrayList是線程不安全的。
ArrayList和Vector都有一個相同的初始容量大小,爲10,可是負載因子不一樣,ArrayList的負載因子是0.5,Vector的負載因子是1,因此每一次擴容ArrayList的長度爲原來的1.5倍,Vector的長度爲原來的2倍rem
九、如何去除vector中的重複元素
HashSet set = new HashSet(vector);get