Java技術面試「小抄」——集合類(實時更新)

寫在以前:

這篇文章是本身面試過程當中,總結出來的關於Java集合類的總結。每次面試以前來出來看看,速度快,也能很迅速的回憶一些細節問題。發佈這篇文章,不單單是但願你們「臨陣磨槍」,更但願你們可以以此學習其內在原理。畢竟,源碼纔是最正確的。java

問題彙總:

1.ArrayList

  • 實現方式:數組;
  • 超出容量的話,增長50%,使用System.arraycopy()複製到新的數組;
  • 默認容量爲10
  • get()和set()性能很高,可是add()/remove()性能差。

2.LinkedList

  • 實現方式:雙向循環鏈表;
  • 沒有容量限制;
  • get()和set()性能差,可是add()/remove()性能很快。

3.Vector

  • 與ArrayList相似
  • 線程同步
  • 使用Iterator方式遍歷
  • 自動增加原來一倍的數組長度

4.HashMap

  • 實現方式:Entry[]數組實現的哈希桶數組;
  • 初始容量爲16,填充因子爲0.7,擴容爲2倍
  • 用Key的哈希值取模桶數組的大小可獲得數組下標;
  • 計算hash對key的hashcode進行了二次hash,以得到更好的散列值,而後對table數組長度取摸
  • Entry用一個next屬性實現多個Entry以單向鏈表存放;
  • JDK8裏,當一個桶裏的Entry超過8後,就不以單向鏈表而以紅黑樹來存放以加快Key的查找速度。

5.HashMap和HashTable區別

  • HashTable的方法前面都有synchronized來同步,是線程安全的;HashMap未經同步,是非線程安全的。
  • HashTable不容許null值(key和value都不能夠) ;HashMap容許null值(key和value均可以)。
  • HashTable有一個contains(Objectvalue)功能和containsValue(Objectvalue)功能同樣。
  • HashTable使用Enumeration進行遍歷;HashMap使用Iterator進行遍歷。
  • HashTable中hash數組默認大小是11,增長的方式是old*2+1HashMap中hash數組的默認大小是16,並且必定是2的指數
  • 哈希值的使用不一樣,HashTable直接使用對象的hashCode; HashMap從新計算hash值,並且用與代替求模。

6.Collection和Collections的區別

  • java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操做的通用接口方法。Collection接口在Java 類庫中有不少具體的實現。Collection接口的意義是爲各類具體的集合提供了最大化的統一操做方式。
  • java.util.Collections 是一個包裝。它包含有各類有關集合操做的靜態多態方法。此類不能實例化,就像一個工具類,服務於Java的Collection框架。

7.HashMap爲何容量是2的冪次

8.hashCode和equals方法的關係

  • equals相等,hashcode必相等;hashcode相等,equals可能不相等。

9.Java集合類框架的基本接口

  • Collection:表明一組對象,每個對象都是他的子元素;
  • Set:不包含重複元素的Collection;
  • List:有序的Collection,能夠包含重複元素;
  • Map:將key映射到value的對象,key不能重複。

10.Enumeration接口與Iterator接口的區別

  • Enumeration接口比Iterator速率的2倍
  • Iterator線程比Enumeration安全
相關文章
相關標籤/搜索