1. 程式人生 > >Java基礎面試題3-說說你知道的幾個Java集合類:list、set、queue、map

Java基礎面試題3-說說你知道的幾個Java集合類:list、set、queue、map

關係

這裡寫圖片描述

這張圖簡單揭示了Set、List與Map之間的相對關係。 
需要說明下的是,圖中的實現並不指這麼簡單的實現,這個稍後會說到。

Collection介面

Collection是Java中最基本的集合介面。它描述了一組有關集合操作的方法。

int Size(); //集合大小
boolean isEmpty(); //是否為空
boolean contains(Object o); //是否包含某個物件
Iterator<E> iterator(); //返回一個迭代物件,用來遍歷集合中的元素
Object[] toArray(); //將集合中的元素以陣列形式然後返回
<T> T[] toArray(T[] a)
; //上一個方法的泛型形式 boolean add(E e); //將物件e新增進集合,新增成功則返回true boolean remove(Object o); //移除某個元素 boolean containsAll(Collection<?> c); //傳入一個集合c,如果c中的元素都存在,則返回true boolean addAll(Collection<? extends E> c); //將集合c中的元素全部新增進本集合 boolean removeAll(Collection<?> c); //本集合減去c集合中的元素 boolean retainAll(Collection<?> c)
; //取本集合和c集合的交集 void clear(); //清空集合 boolean equals(Object o); //判斷相等 int hashCode(); //獲取集合當前的hash值

Set介面

Set介面直接繼承自Collection介面,並且方法介面上也一模一樣。Set對新增的元素有一些要求,其不允許出現重複的元素,並且元素之間沒有次序。這相當於一個不允許重複的離散的集合。因此,新增進Set的元素型別需要定義equals方法。若是使用自定義的類,則應該重寫equals方法來確保實現自己需要的功能。

Set介面主要實現了兩個類:HashSet,TreeSet。

HashSet是按照雜湊來存取元素的,因此速度較快。HashSet繼承自抽象類AbstractSet,然後實現了Set、Cloneable、Serializable介面。 
TreeSet

也是繼承自AbstractSet,不過不同的是其實現的是NavigableSet介面。而NavigableSet繼承自SortedSet。SortedSet是一個有序的集合。其新增的元素必須實現了Comparable介面,因為其在新增一個元素的時候需要進行排序。NavigableSet則提供了更多的有關元素次序的方法,比如:

E lower(E e); //找出小於e的元素
E floor(E e); //找出小於等於e的元素
E ceiling(E e); //找出大於等於e的元素
E higher(E e); //找出大於e的元素
E pollFirst(); //彈出第一個(最小)元素,如果集合為空則返回null
E pollLast(); //彈出最後一個(最大)元素,如果集合為空則返回null

LinkedHashSet也是Set的一個實現。和HashSet類似,只不過內部用連結串列來維護,按照元素插入次序來儲存。

List介面

List介面也是繼承自Collection。與Set不同的是,List可以儲存重複的元素。主要有兩種實現:ArrayList和LinkedList。 
ArrayList沒有什麼好說的,就像傳統的陣列一樣,有著很快的隨機存取速度,但是插入刪除的速度就很慢。 
LinkedList則與ArrayList恰恰相反,因為用連結串列來儲存資料,所以插入刪除元素的速度很快,但是訪問資料的速度就不如ArrayList了。

Map介面

Map(對映)是一個儲存鍵值對的容器介面。每一個元素包含一個key物件和value物件,且元素不允許重複。 
Map介面的實現有以下幾個: 
HashMap是最常用的一個實現。HashMap使用hash對映來存取資料,這個速度是相當快,是O(1)的速度。其容量capacity,和負載因子load factor可以在一開始設定。當元素個數達到capacity*load factor的時候,就會進行擴容。 
LinkedHashMap和HashMap類似,只不過內部用連結串列來維護次序。因此遍歷時候的順序是其插入順序。 
TreeMap是基於紅黑樹的Map,插入的資料被有次序儲存,並且有很高的效率。因此在遍歷輸出的時候可以得到排序的資料。但是這要求插入的資料實現了comparable介面。

總結

  1. Collection、Set、List和Map都是介面,不能被例項化。
  2. Set和List都繼承自Collection,而Map則和Collection沒什麼關係。
  3. Set和List的區別在於Set不能重複,而List可以重複。
  4. Map和Set與List的區別在於,Map是存取鍵值對,而另外兩個則是儲存一個元素。

轉載原處:http://blog.csdn.net/haelang/article/details/44809645