集合家族圖
---|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<E> listIterator()
不包含重複的元素
HashSet
TreeSet
LinkedHashSet
注意:Set的元素不可重複,Map的鍵不可重複,如果存入重複元素如何處理
Set元素重複元素不能存入add方法傳回false
Map的重複健将覆寫舊鍵,将舊值傳回。
底層是哈希表資料結構,線程是不同步的,可以存入null鍵,null值。要保證鍵的唯一性,需要覆寫hashCode方法,和equals方法。
Map<String, Integer > map1 = new HashMap<String, Integer >();
HashMap<Person, String> hm = new HashMap<Person, String>();
自定義元素排序