注:圖片出自《Core Java SE 9 for the Impatient》java
全部的集合接口都是泛型類型的,鼓勵在代碼中儘量地使用接口,一般Collection、List、Map就足夠了。
例如:在構造一個ArrayList後,將引用儲存在一個List類型的變量中:框架
List<String> words = new ArrayList<>();
dom
List是一個有序的集合。ArrayList類和LinkedList類實現了List接口。LinkedList插入操做很快————你只須要"拼接"節點便可。可是要達到鏈表中間會很緩慢,由於你須要從頭節點開始遍歷全部節點。ArrayList實現了RandomAccess接口,用來代表其支持快速(一般是固定時間)隨機訪問,而且ArrayList用for或者foreach訪問更快。spa
在Set中,元素不會被插入特定的位置,而且不容許重複元素,能夠高效地檢測一個值是否是它的元素,當順序可有可無時,Set頗有用。
HashSet和TreeSet類都是實現了Set接口,若是想按順序遍歷集合,則可使用TreeSet。code
Map儲存鍵值對,HashMap和TreeMap都實現了Map接口,HashMap類不保證映射的順序,特別是它不保證該順序恆久不變,若是須要按順序訪問鍵的話,則使用TreeMap。blog
例子:獲取一個鍵對應的值接口
Map<String, Integer> counts = new HashMap<>(); counts.put("Alice", 1); //若是鍵不存在的話,則get方法將會返回null,int不能爲null,當get的返回值進行拆箱操做時,會致使NullPointerException。 int count = counts.get("Alice"); 改進版: //這樣,若是鍵不存在,也會返回0。 int count = counts.getOrDefault("Alice", 0);
Collection的父接口Iterable<T>定義了一個方法:Iterator<T> iterator()
圖片
能夠用它來訪問全部元素:element
Collection<String> coll =...; Iterator<String> iter = coll.iterator(); while (iter.hasNext()){ String element = iter.next(); //處理element } 這個例子中,能夠直接使用foreach: for(String element : coll){ //處理element }
Iterator接口也提供了一個remove方法,能夠移除以前訪問的元素。rem
while (iter.hasNext()){ String element = iter.next(); if(element fulfills the condition) iter.remove(); } 然而,使用removeIf方法更容易: coll.removeIf(e -> e fulfills the condition)