Java 1.8 java.util.Collection包学习记录

Java 1.8 java.util.Collection包学习记录_第1张图片

1、开始于jdk1.2版本 Collection 继承 Iterable
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 iterator() :
返回collection中元素的迭代器,不能保证元素的返回顺序
注意:collection不能为空

Object[] toArray():
返回一个包含collection中所有元素的数组。
如果这个集合保证迭代器返回元素的顺序,则该方法必须以相同的顺序返回元素。
返回的数组是“安全的”,因为这个集合不维护对它的引用。(换句话说,这个方法必须分配一个新的数组,即使这个集合是由数组支持的)。因此,调用者可以自由地修改返回的数组。
此方法充当基于数组的api和基于集合的api之间的桥梁。

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 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 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 spliterator() :

default Spliterator<E> spliterator() {
			return Spliterators.spliterator(this, 0);
		}
	创建一个覆盖这个Collection所有元素的拆分器(Spliterator)
	与sream()流相关
	开始于jdk 1.8

default Stream stream() :

default Stream<E> stream() {
			return StreamSupport.stream(spliterator(), false);
		}
	给这个collection创建一个顺序的流作为它的资源
	集合的流操作
	开始于jdk 1.8

default Stream parallelStream() :

default Stream<E> parallelStream() {
			return StreamSupport.stream(spliterator(), true);
		}
	给这个collection创建一个并行流作为它的资源。也允许这个方法返回一个顺序流
	集合的流操作
	开始于jdk 1.8

你可能感兴趣的:(Java,源码,java)