javautil包下的collection集合学习

collection集合是一个根类接口。一个集合代表了有一组对象,里面有各个元素。
一些集合是允许有重复元素存在的,但是一些集合石不允许有重复元素存在的
一些集合是有序的,一些集合则是无序的
JDK并没有直接为这个接口提供一个直接实现类,它提供了像是set和list这种子接口,collection接口通常只在需要通用性的集合的地方来进行使用,其他地方都可以直接使用它的子类

所有的通用实现类通常实现了Collection,或者是间接通过它的子接口来继承了Collection,都应该要提供两个标准的结构体:
一个是无参数结构,用来创建一个空集合;而另外一个结构体有一个有参构造,可以用这个有参构造里面的参数来创建一个新的集合。
实际上,这个有参数的构造允许使用者来复制得到一个集合,产生一个需要被实现的相同集合。
这里并没有方式可以强制相等(因为接口不能包含结构体),但是Collection集合这个接口是为了提供通用的一些集合相关的操作,是Java平台库中的基础实现的体现。

在Collection接口中包含有"破坏性"的方法,它们会抛出不支持的异常“UnsupportedOperationException”,如果这个集合不支持这种操作,
就会抛出“UnsupportedOperationException”的异常。如果这个调用对于集合没有影响。
举个例子:调用了collection集合中的addAll这个方法去操作一个不可修改的集合,但是这个并不是集合中需要的方法,就会抛出一个异常

一些集合的实现对于它们能够存储的元素是有限制的。举个例子:
collection的一些实现的子类中是不能有null元素存在的,但是另一些子集合是允许有null元素存在的。
如果你试着添加一个不合规的元素,这时候就会抛出不受检异常。例如NPE和classCastException这种异常
如果尝试查询一个“不合格”的存在就会抛出一个异常,或者有可能简单的返回一个false。
通常来说,如果你尝试操作一个不合规的元素,,无论是这个不合规的元素是在插入时候是没有插入成功,这时候出现的异常可能会被表示成为“optional”异常。

怎么处理,例如是抛出空指针还是返回false取决于每一个子集合定义的方式规则。
在一些缺少强校验的子类集合实现中,如果调用了这个集合中并没有定义存在的方法可能在线程调用时候造成一些不可知的异常,
这种调用包含直接调用集合,也包含通过集合传递给可能执行调用的方法,或者是用了集合中的迭代器

集合框架中定义了很多关于equals比较的方法,举个例子,关于是否包含contains的这个方法来说:有且仅当集合中含有这样一个元素的时候才返回true
这种特殊的定义不应该在没有参数的集合当中去使用,实现类的子类可以任意选择自己想要实现的方式。
例如,对于比较两个元素的hashcode来说,如果两个对象的哈希code不相同,则两个对象一定不相同。
通常来说,只要实现者认为合适,各种集合框架接口的实现可以自由地利用底层 {@link Object} 方法的指定行为。

一些集合中关于recursive traversal递归遍历的操作可能会失败,当涉及到集合中直接或者间接操作集合中自身迭代元素时候会失败,
例如clone(),equals(),hashcode()和toString()这几个方法,集合的子类实现类可以选择性的处理这些和自身元素递归迭代相关的操作模式,
通常来说,很多的子类实现是不会去操作自身元素来进行递归迭代的。

默认方法实现(继承或其他)不应用任何同步协议。 如果 {@code Collection} 实现具有特定的同步协议,则它必须覆盖默认实现以应用该协议。在Collection集合当中常用的方法有以下:

集合Collection继承于Iterable接口

//查询操作

1.int size()

//返回这个集合中元素的数量,如果集合当中元素的数量超过了MAX_VALUE的值,返回MAX_VALUE

2.boolean isEmpty()

//判断一个集合是否为空,为空则返回true

3.boolean contains(Object o)

//判断一个集合中是否包含特定的某一个元素-用于元素查找确定,当集合中含有至少一个元素的时候返回true
可能出现的异常:
3.1 ClassCastException:如果这个被查找的类型与集合当中元素的类型不匹配时候抛出的异常
3.2 NullPointerException:如果这个被查找的元素是个空,并且这个集合是不允许空元素存在时候抛出的异常

4.Iterator iterator();

//返回这个集合当中元素的遍历结果。这个方法并没有关于返回元素顺序的保证(除非这个被遍历的集合本身是有序的)

@NotNull

5.Object[] toArray();

//返回这个集合当中所有元素组成的一个数组。如果这个集合是有序的,返回的数组也是有序的,而且返回的顺序和集合中元素的顺序一致;
//这个被返回的数组应该是“安全的”,没有被集合引用维护的。换而言之,这个方法必须是创建一个新的数组,即使这个集合原本就是被一个数组支持的
//因此调用者可以自由修改返回的数组,这个方法也是array和collection之间的互相转化的基础方法

6.boolean add(E e);

//往集合当中添加一个特定的元素,如果添加成功返回true,如果集合不允许有重复元素或者这个元素已经存在返回false
//支持此操作的集合可能会限制可以添加到此集合的元素。特别是,有一些集合是不允许集合当中有null元素存在的,集合类应在其文档中明确指定对可以添加哪些元素的任何限制。
可能出现的异常:
6.1 UnsupportedOperationException:这个添加元素的操作被集合拒绝了,不允许添加
6.2 ClassCastException:准备被添加进行的这个元素和集合当中已有的元素类型不匹配
6.3 NullPointerException:准备被添加的这个元素是空,并且这个集合当中不许存在为null的元素
6.4 IllegalArgumentException:如果元素的某些属性阻止它被添加到此集合中
6.5 IllegalStateException:由于时间状态限制,此时无法插入此元素

7.boolean remove(Object o);

//如果集合当中存在某一个特定的元素,从集合当中移除这个指定的元素,成功移除返回true
7.1 ClassCastException:如果被移除的这个元素与集合当中原有元素类型incompatible不相同
7.2 NullPointerException:如果这个被移除的元素为空,并且这个集合是一个不允许为空的集合类型
7.3 UnsupportedOperationException: 如果这个集合并不允许移除元素这样的操作,例如是个被声明为final的集合?

// Bulk Operations批量操作

8.boolean containsAll(Collection<?> c);

//判断一个集合是否包含另一个集合的全部元素
可能出现的异常:
8.1 ClassCastException:如果这个需要被判断是否被包含的集合类型和原集合类型不匹配,返回这个异常
8.2 NullPointerException:如果这个需要被判断是否被包含的集合当中有空元素,而原集合不允许存在空元素

9.boolean addAll(Collection<? extends E> c);

//判断一个新集合是否被全部添加进了老集合当中,如果成功添加返回true,否则返回false
可能出现的异常:
9.1 UnsupportedOperationException:如果这个老集合本身并不支持addAll这个方法,返回这个异常
9.2 ClassCastException:如果这个需要被添加的集合,和老集合类型不匹配,返回这个异常
9.3 NullPointerException:如果这个需要被添加的集合当中有空元素,而原集合不允许存在空元素
9.4 IllegalArgumentException:如果这个需要被添加新集合的某些属性阻止它被添加到原集合不允许有这些属性
9.5 IllegalStateException

10.boolean removeAll(Collection<?> c);

//如果这个老集合当中包含了这个被移除的集合,从老集合当中移除这个被包含的集合,如果成功移除返回true,否则返回false
可能出现的异常:
10.1 UnsupportedOperationException 如果这个集合不支持这个全部移除的操作,就会返回这个异常
10.2 ClassCastException 如果这个集合中有1个或者超过1个元素和这个原集合中额元素类型不匹配,就会返回这个异常
10.3 NullPointerException 如果这个被移除的集合中包含了一个或者多个元素是null元素,但是原集合不支持null元素存在,就会返回NullPointerException

11.removeIf

 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;
		    }

如果满足filter的过滤条件,则满足的元素逐一被移除。
如果filter为空,则抛出空指针异常;如果这个集合中的元素不支持被移除,则会抛出UnsupportedOperationException异常

12.boolean retainAll(Collection<?> c);

这个指的是给初入一个新集合,如果新集合中的元素在老集合中包含,则这个元素被保留下来;如果一个元素在老集合中有,但是这个传入的新集合没有,
则要把这个元素移除掉,也就是只保留传入集合中存在的元素,其他元素都移除。这个API和removeAll的用法互补。

13.void clear();

//清除集合当中的所有元素

14. 转化为流

default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }		
把Collection集合转化成一个Stream流

15. 转化为并行流

default Stream<E> parallelStream() {
    return StreamSupport.stream(spliterator(), true);
}       
把Collection集合转化成一个并行流,可以用多线程来处理转换后的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值