面試之java集合那點事

 寫在前面:


  這裏重點說一下,以前對於說List有序而Set無序挺矛盾的,爲什麼這麼說呢?主要是對於說List有序,然而他的
 子類並沒有關於排序的內容;對於Set說無序吧,但是他的子類還是有排序的,主要是歸因於Set內部有自己的排序
 算法,如TreeSet。所以說,我們明面上說的List有序Set無序指的是,元素存入對應集合的時候是有序的,如List
 中元素是怎麼放進去的就怎麼取出來,而Set卻不是的,所以說Set是無序的。不知道這對你們有沒有幫助?
 
 Collection
    List : 有序可重複的(因爲有索引),這裏有序指的是怎麼進的怎麼出,並沒有對其排序

  1.   ArrayList :底層是數組,線程不同步,查詢快增刪慢
  2.  Vector :底層是數組,線程同步(方法被synchronized所修飾),查詢快增刪慢,效率低,現在基本不怎麼用
  3.   LinkedList :底層是鏈表,線程不同步,查詢慢增刪快
  4.   Stack: Stack繼承了Vector,實現了LIFO的數據結構,是後進先出的堆棧。

   Set:無序的不可重複

  1. HashSet :是由HashMap支持的,在HashSet的構造器中,首先是new一個HashMap的對象,源碼中可見。所以說,HashSet是建立在HashMap之上的,他存儲唯一空值元素,不保持插入順序,線程不安全的。 HashSet保持元素的唯一性:主要是因爲,對象存入HashSet時,對象的hashcode值會判斷一個元素是否在該集合中,但是具有相同hashcode值的對象可能不相等,我們需要使用equals()方法來比較對象
  2. Treeset :有序的集合,基於TreeMap實現的,支持兩種排序方法:自然排序和根據實現Comparable接口,覆蓋compareTo(Object obj)方法或者實現Comparator接口,覆蓋compare(Object o1,Object o2)方法
  3. LinkedHashSet :繼承了HashSet,輸出LinkedHashSet集合中的元素時,元素的順序總是和添加順序一致。

 Map:

  1.  HashMap :是最常用的Map,根據鍵的HashCode值存儲數據,根據鍵來獲取數據,訪問速度快允許最多一條記錄的鍵爲null,允許多條記錄的值爲null;不支持線程同步的,如果需要同步的,可以用Collections的synchronizedMap方法使用HashMap具有同步的功能。
  2. TreeMap :不僅可以保持順序(默認升序),而且可以用於排序,實現Comparator接口
  3.  HashTable :線程同步的,裏邊的方法都是有synchronize修飾的,不允許存NULL值null鍵
  4.  LinkedHashMap :繼承HashMap,內部維持一個雙向鏈表,有序的怎麼添加進去的怎麼取出來
  5.  ConcurrentHashMap :加入了lock機制,併發性能好,比較HashTable更好,鍵值對都不允許爲null
  6.  WeakHashMap:和HashMap一樣,是一個散列表,存儲內容也是鍵值對,鍵和值都可以爲null,但他含有弱鍵,弱鍵就是在WeakHashMap不在正常使用時,會被移除。 

  我們可以通過Collections.newSetFromMap(Map<E,Boolean> map)方法可以將任何 Map包裝成一個Set

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章