Java集合框架相關知識整理

一、常見的集合有哪些?
  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

相關文章
相關標籤/搜索