天天看點

java 集合 Connection 棧 隊列 及一些常用

集合家族圖

---|Collection: 單列集合

           ---|List: 有存儲順序, 可重複

              ---|ArrayList:    數組實作, 查找快, 增删慢                         

              ---|LinkedList:   連結清單實作, 增删快, 查找慢  實作了 棧 隊列                       

              ---|Vector:   和ArrayList原理相同, 但線程安全, 效率略低           

---| Stuck 類

           ---|Set: 無存儲順序, 不可重複

              ---|HashSet  線程不安全,存取速度快。底層是以哈希表實作的

              ---|TreeSet  紅-黑樹的資料結構,預設對元素進行自然排序(String)。如果在比較的時候兩個對象傳回值為0,,那麼元素重複。 Comparable,Comparator。 

              ---|LinkedHashSet

---| Map: 鍵值對

       ---|HashMap 采用哈希表實作,是以無序

       ---|TreeMap 可以對鍵值進行排序

       ---|HashTable 線程同步

  Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。

  一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。

  Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。

  所有實作Collection接口的類都必須提供兩個标準的構造函數:

  無參數的構造函數用于建立一個空的Collection,

  有一個Collection參數的構造函數用于建立一個新的Collection,

  這個新的Collection與傳入的Collection有相同的元素。

  後一個構造函數允許使用者複制一個Collection。

<a></a>

連結清單實作, 增删快, 查找慢

1:棧 (1.6)

數組實作, 查找快, 增删慢

Vector: 描述的是一個線程安全的ArrayList。

ArrayList: 單線程效率高

Vector   : 多線程安全的,是以效率低

由Vector建立的Iterator,雖然和ArrayList建立的Iterator是同一接口,但是,因為Vector是同步的,

當一個Iterator被建立而且正在被使用,另一個線程改變了Vector的狀态(例如,添加或删除了一些元素),

這時調用Iterator的方法時将抛出ConcurrentModificationException,是以必須捕獲該異常。

Stack繼承自Vector,實作一個後進先出的堆棧。

Stack提供5個額外的方法使得Vector得以被當作堆棧使用。基本的push和pop方法,

還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛建立後是空棧。

每一種集合類傳回的Iterator具體類型可能不同,但它們都實作了Iterator接口,是以,我們不需要關心到底是哪種Iterator,它隻需要獲得這個Iterator接口即可,這就是接口的好處,面向對象的威力。

Iterator it = list.iterator();

ListIterator&lt;E&gt; listIterator()

不包含重複的元素

  HashSet  

  TreeSet

  LinkedHashSet

注意:Set的元素不可重複,Map的鍵不可重複,如果存入重複元素如何處理

Set元素重複元素不能存入add方法傳回false

Map的重複健将覆寫舊鍵,将舊值傳回。

底層是哈希表資料結構,線程是不同步的,可以存入null鍵,null值。要保證鍵的唯一性,需要覆寫hashCode方法,和equals方法。

Map&lt;String, Integer &gt; map1 = new HashMap&lt;String, Integer &gt;();

HashMap&lt;Person, String&gt; hm = new HashMap&lt;Person, String&gt;();

自定義元素排序