Java集合框架_三_Collection接口

    第一篇博客中提到了集合中的兩組接口,Collection Map,它們有各自的特色,以便讓開發者在編寫代碼有最合適的選擇。從本篇開始,將逐一學習Collection接口及其子接口和實現類。java

1、先囉嗦一下

    Collection 接口是一個根部接口,以Collection 爲父接口的這一組接口所存儲的是一組對象,也可稱做一組元素。那這些元素是否有序,是否容許重複,各類操做有無特殊性?根據這些問題,咱們很容易理解爲何有子接口 List、Set和Queue了。
api

    更多信息,查閱 JDK 官方文檔
數組

2、方法

    一、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()

        返回集合的哈希碼值。(該學習下哈希碼值了。)

3、Collection和Collections的區別

    Collection是接口,它提供了上述方法。而Collections是一個工具類,它包含專門操做集合的靜態方法,如排序、拷貝、匹配查找等等。更多關於Collections類的方法將在之後的博客中作介紹。

相關文章
相關標籤/搜索