1. 程式人生 > 其它 >Java 1.8 java.util.Collection包學習記錄

Java 1.8 java.util.Collection包學習記錄

技術標籤:Javajava

在這裡插入圖片描述

1、開始於jdk1.2版本 Collection<E> 繼承 Iterable<E>
2、關聯的其他:Set、 List、Map、SortSet、SortMap、HashSet、HashMap、TreeSet、ArrayList、LinkedList、Vector、Collections、Arrays、AbstractCollection
3、包含方法:
int size() :
返回這個collection的成員總數量

java boolean isEmpty():
如果這個collection不包含成員,返回true

boolean contains(Object object)

:
如果collection中包含這個特殊的 object 元素返回true
object= =null ? e= =null : object.equals(e))
丟擲異常:
ClassCastException :如果object的型別與collection中元素的型別不相匹配時丟擲
NullPointerException :如果這個object為null,並且collection中不存在null的元素時丟擲

Iterator<E> iterator() :
返回collection中元素的迭代器,不能保證元素的返回順序
注意:collection不能為空

Object[] toArray()

:
返回一個包含collection中所有元素的陣列。
如果這個集合保證迭代器返回元素的順序,則該方法必須以相同的順序返回元素。
返回的陣列是“安全的”,因為這個集合不維護對它的引用。(換句話說,這個方法必須分配一個新的陣列,即使這個集合是由陣列支援的)。因此,呼叫者可以自由地修改返回的陣列。
此方法充當基於陣列的api和基於集合的api之間的橋樑。

<T> T[] toArray(T[] a)
返回一個包含collection中所有元素的陣列。
如果這個集合保證迭代器返回元素的順序,則該方法必須以相同的順序返回元素。
陣列比這個集合擁有更多的元素,則緊靠集合末尾的陣列中的元素被設定為null。(只有當呼叫方知道該集合不包含任何空元素時,這在確定該集合的長度時才有用。

他的方法允許精確地控制輸出陣列的執行時型別,並且在某些情況下,可以用來節省分配成本。
假設x是一個已知只包含字串的集合。下面的程式碼可以用來將集合轉儲到一個新分配的字串陣列中: String[] y = x.toArray(new String[0]);
這個集合的元素將儲存到其中的陣列(如果它足夠大的話);否則,將為此目的分配一個相同執行時型別的新陣列。
丟擲異常:
ArrayStoreException :如果指定陣列的執行時型別不是此集合中每個元素的執行時型別的超型別
NullPointerException :如果指定的陣列為空

boolean add(E e) :
確保這個collection包含這個指定的元素。
如果這個collection改變,返回true給呼叫者。
如果這個collection不允許重複和已經包含這個指定元素,返回false
丟擲異常:
UnsupportOperationException : 如果新增操作不被這個collection允許
ClassCastException : 如果這個指定元素的類阻止它被新增到這個collection
NullPointerException : 指定元素為null,collection不允許null元素
IllegalArgumentException :這個元素的一些屬性阻止它被新增到這個collection
IllegalStateException :如果由於插入限制,此時無法新增元素

boolean remove(Object o) :
從collection中移除一個單一例項的指定元素。
一個元素被移除返回true
丟擲異常:
ClassCastException : 如果這個指定元素的型別不被這個collection相容
NullPointerException : 如果這個元素為null,並且這個collection不允許null元素存在
UnsupportOperationException : 如果移除操作不被collection支援

boolean containsAll(Collection<?> c) :
如果這個collection包含的所有元素在這個指定的collection中,返回true
丟擲異常:
ClassCastException : 如果指定collection中的一個或多個元素型別不被允許在這個collection中
NullPointerException : 指定的collection中包含一個或多個null元素,這個collection不允許null元素。或者這個指定collection為null

boolean addAll(Collection<? extends E> c) :
如果這個collection被改變,返回true。
將指定colection的所有元素新增到這個collection中。
如果在操作進行時修改了指定的集合,則此操作的行為未定義。(這意味著如果指定的集合是這個集合,並且這個集合非空,則此呼叫的行為是未定義的。)
丟擲異常:
UnsupportOperationException : 如果這個collection不支援addAll操作
ClassCastException : 如果指定集合的元素的類阻止將其新增到此集合中
NullPointerException : 如果指定collection包含一個null元素,這個collection不允許null元素。或者這個指定collection為null
IllegalArgumentException : 這個collection的一些屬性阻止它被新增到這個collection
IllegalStateException :如果由於插入限制,此時無法新增所有元素

boolean removeAll(Collection<?> c) :
Collection<?> c 不能為null
移除這個collection中所有被包含在指定collection中的元素。
丟擲異常:
UnsupportOperationException : 如果removeAll方法不被這個collection支援
ClassCastException : 如果這個collection中的一個或多個元素的型別與指定collection不相容
NullPointerException : 如果指定collection包含一個null元素,這個collection不允許null元素。或者這個指定collection為null

default boolean removeIf(Predicate<? super E> filter) :
開始於jdk 1.8
移除這個collection中所有滿足給定的predicate的元素。
實現原理:
這個實現方式使用iterator()貫穿這個collection的所有元素,每一個元素的移除都使用iterator.remove().

default boolean removeIf(Predicate<? super E> filter) {
				Objects.requireNonNull(filter);
				boolean removed = false;
				final Iterator<E> each = iterator();
				while (each.hasNext()) {
					if (filter.test(each.next())) {
						each.remove();
						removed = true;
					}
				}
				return removed;
			}

丟擲異常:
NullPointerException :如果指定的filter為null
UnsupportOperationException : 如果這個collection的元素不能被移除。如果一個匹配的元素不能夠被移除就報這個異常

boolean retainAll(Collection<?> c) :
Collection<?> c 不能為null
僅保留這個collection中被包含在指定collection中的元素。也就是說移除這個collection中不包含在指定collection中的元素
丟擲異常:
UnsupportOperationException : 如果這個collection不支援retainAll的操作
ClassCastException : 如果這個collection中的一個或多個元素不兼容於這個指定的collection
NullPointerException : 如果這個collection包含一個或多個null元素,指定的collection不允許null元素。或者指定collection為null

void clear() :
移除這個collection中的所有元素,執行後,這個collection會變成空(null)

boolean equals( Object o) :
比較這個collection與指定Object的相等性
equals,“直接”實現集合介面(換句話說,建立一個集合但不是集合或列表的類)的程式設計師如果選擇重寫Object.equals,則必須非常小心。沒有必要這樣做,最簡單的做法是依賴於物件的實現,但是實現者可能希望實現“值比較”來代替預設的“引用比較”。(List和Set介面要求進行這種值比較。)
equals方法宣告equals必須是對稱的(換句話說,a = (b)當且僅當b = (a))。
,自定義等於一個集合類實現方法列表和設定介面必須返回假當這個集合是任何列表或組相比。(同樣的邏輯,它是不可能正確地編寫一個類,實現了集和列表介面。)

int hashCode() :
返回此集合的雜湊碼值
當Collection介面給Object.hashCode方法新增通用約定沒有的要求時,程式設計師需要注意任何class重寫Object.equals方法,為了滿足通用約定關於Object.hashCode方法必須也重寫Object.hashCode方法。尤其是,c1.equals(c2) 意味著 c1.hashCode()==c2.hashCode().

default Spliterator<E> spliterator() :

default Spliterator<E> spliterator() {
			return Spliterators.spliterator(this, 0);
		}
	建立一個覆蓋這個Collection所有元素的拆分器(Spliterator)
	與sream()流相關
	開始於jdk 1.8

default Stream<E> stream() :

default Stream<E> stream() {
			return StreamSupport.stream(spliterator(), false);
		}
	給這個collection建立一個順序的流作為它的資源
	集合的流操作
	開始於jdk 1.8

default Stream<E> parallelStream() :

default Stream<E> parallelStream() {
			return StreamSupport.stream(spliterator(), true);
		}
	給這個collection建立一個並行流作為它的資源。也允許這個方法返回一個順序流
	集合的流操作
	開始於jdk 1.8