第一篇博客中提到了集合中的兩組接口,Collection 和 Map,它們有各自的特色,以便讓開發者在編寫代碼有最合適的選擇。從本篇開始,將逐一學習Collection接口及其子接口和實現類。java
Collection 接口是一個根部接口,以Collection 爲父接口的這一組接口所存儲的是一組對象,也可稱做一組元素。那這些元素是否有序,是否容許重複,各類操做有無特殊性?根據這些問題,咱們很容易理解爲何有子接口 List、Set和Queue了。
api
更多信息,查閱 JDK 官方文檔。
數組
一、int size()oracle
這個方法在循環列表時常用,它獲得集合中的對象個數,集合中元素個數>Integer.MAX_VALUE時,則返回Integer.MAX_VALUE。工具
二、boolean isEmpty()
學習
判斷集合中是否包含對象,很少說。
url
三、boolean contains(Object o)
spa
判斷集合中是否包含指定的對象。.net
#當指定對象爲null時,若是集合中至少有一個對象爲null,那麼調用此方法返回true;code
#當指定對象不爲空時,若是有對象 e 知足 o.equals(e),那麼調用此方法將返回true。
#當指定對象爲null,而調用該方法的集合對象不容許null元素存在時,則會拋出NullPointerException異常。
四、Iterator<E> iterator
此方法從Iterable接口中繼承而來,返回的是在此集合上進行迭代的迭代器。因爲Collection接口並不肯定元素是否有序,即便有序,也沒法肯定是以何種方式排序,因此迭代的順序不可預知。
五、Object[] toArray()
此方法將一組對象元素的存儲方式轉換成了數組,利用數組來管理這組對象。由迭代器方法 iterator 返回的對象順序,也將做用到此方法。
另外,調用此方法返回的數組能夠任意修改而不會對原集合形成任何影響。
此方法充當了基於數組的 API 和基於Collection 的 API 之間的橋樑
六、<T> T[] toArray(T[] a)
把集合存儲到指定的數組 a 中,但若是 a 的容量不夠了,那麼將創建一個與 a 數組有相同運行時類型的新數組用來存儲集合中的元素。
// 聲明一個List List<String> list = new ArrayList<String>(); // 添加元素 list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); // 新建數組 String[] strArr = new String[5]; // 調用toArray(T[] a)方法 list.toArray(strArr); // 輸出數組 System.out.println("舊數組:"); for(String str : strArr) { System.out.println(str); } // 輸出新數組 System.out.println("新數組:"); for(String str : newStrArr) { System.out.println(str); }
結果以下: 舊數組: null null null null null 新數組: 1 2 3 4 5 6
能夠看到,strArr 的容量並不夠容納下集合元素,strArr不能勝任這份工做,toArray方法返回一個新的數組。下面將數組的容量增到到足以容納下集合元素個數。
// 將數組的容量擴大,並初始化數組的一個元素 String[] strArr = new String[7]; strArr[0] = "IAmHere";
結果以下: 1 2 3 4 5 6 null
可見,調用此方法會忽略掉初始化的數組元素,進而搶佔數組,即便搶佔後數組還有剩餘容量,也不會分配給初始元素。
七、boolean add(E e)
向集合中添加指定元素 e。
返回true的狀況:
(1)集合中沒有此元素,集合容許添加指定類型 E;
(2)集合中由此元素,但容許有重複元素;
返回false的狀況:集合不容許有重複元素,集合中有此元素。
八、boolean remove(Object o)
若是集合中有指定元素 o,則將 o 移除,並返回true,不然返回false。
九、boolean containsAll(Collection<?> c)
集合中包含集合 c 中的全部元素,則返回true。以爲苛刻嗎?
十、boolean addAll(Collection<? extends E> c)
將指定集合 c 中的全部元素都添加到此集合中,集合若所以調用發生變化,則返回true。
有趣的是,本身添加本身會發生什麼呢?咱們來看看:
// 聲明一個List List<String> list = new ArrayList<String>(); // 添加元素 list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); // 添加本身 list.addAll(list); // 輸出 for(String str : list) { System.out.println(str); }
結果: 1 2 3 4 5 6 1 2 3 4 5 6
合理嗎?官方文檔說這種調用的行爲是不肯定的,那麼咱們最好別這麼幹!
十一、boolean removeAll(Collection<?> c)
移除集合中那些也包含在指定集合 c 中的全部元素,若所以調用致使集合發生改變,則返回true。此調用移除的是兩個集合的交集。
十二、boolean retainAll(Collection<?> c)
移除集合中那些不包含在指定集合 c 中的全部元素,若所以調用致使集合發生改變,則返回true。此調用保留的是兩個集合的交集。
1三、void clear()
移除集合中的全部元素。
1四、boolean equals(Object o)
比較集合和指定對象 o 是否相等。
1五、int hashCode()
返回集合的哈希碼值。(該學習下哈希碼值了。)
Collection是接口,它提供了上述方法。而Collections是一個工具類,它包含專門操做集合的靜態方法,如排序、拷貝、匹配查找等等。更多關於Collections類的方法將在之後的博客中作介紹。