Collection接口研究

以下内容基于jdk1.8

接口Collection分析

img

img

该接口实现了接口Iterable

方法:

int size();

返回元素的个数

boolean isEmpty();

返回是否为空

boolean contains(Object o);

返回是否包含某个对象
抛出异常:

  • @throws ClassCastException 参数不兼容
  • @throws NullPointerException 参数是null,并且容器不允许包含null元素

Object[] toArray();

返回所有元素组成的一个数组
数组是重新分配空间并创建的,它的元素不会由该容器维护,原文:

The returned array will be “safe” in that no references to it are maintained by this collection. (In other words, this method must allocate a new array even if this collection is backed by an array). The caller is thus free to modify the returned array.

T[] toArray(T[] a);

如果给定的数组大小能容纳该容器所有元素,则返回到给定数组中,否则会新分配一个可以容纳所有元素的数组并返回。

List<Integer> list = new ArrayList<Integer>();
Integer[] a = new Integer[2];
list.add(3);
list.add(5);
list.toArray(a); // a = {3,5}

抛出异常:

  • @throws ArrayStoreException 给定的数组运行类型不是该容器运行类型的超类
  • @throws NullPointerException 给定的数组是null

boolean add(E e);

确保该容器包含该指定的元素,如果因为这个操作改变了容器内的元素返回true,如果该容器已经有了该元素且不允许包含重复的元素则返回false

抛出异常:

  • @throws UnsupportedOperationException 该容器不支持这个操作
  • @throws ClassCastException 给定的元素不能添加进容器中
  • @throws NullPointerException 参数是null,并且容器不允许包含null元素
  • @throws IllegalArgumentException 给定的元素的某些属性决定了它不能被添加进该容器中
  • @throws IllegalStateException 由于某些限制该时间不能添加该元素

boolean remove(Object o);

移除某个元素
抛出异常:

  • @throws ClassCastException
  • @throws NullPointerException
  • @throws UnsupportedOperationException

boolean containsAll(Collection c)

如果该容器包含给定的容器中的所有元素,返回`true`
抛出异常:

- @throws ClassCastException
- @throws NullPointerException

## boolean addAll(Collection c)

将给定容器中的所有元素插入到该容器中
抛出异常:

- @throws UnsupportedOperationException
- @throws ClassCastException
- @throws NullPointerException
- @throws IllegalArgumentException
- @throws IllegalStateException

## boolean removeAll(Collection c)

将该容器和给定容器中共有的元素从该容器中删除
抛出异常:

  • @throws UnsupportedOperationException
  • @throws ClassCastException
  • @throws NullPointerException

default boolean removeIf(Predicate filter)

`Predicate`是JAVA8新增的一个函数式接口(指如果填写lambda表达式则默认实现Predicate的test方法),这个方法删除所有符合条件的元素,如果成功返回`true`
**? super E指的是E或E的父类**
默认实现:

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

调用实例:

```java
Integer[] nums = {1,2,3,4,5,6};
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(nums));
list.removeIf(num->num>3?true:false);//删除list中大于3的元素
//这里的lambda表达式是简化的写法,将lambda表达式完整的写法是list.removeIf((Integer num)->{return num>3?true:false;});
```

抛出异常:

- @throws NullPointerException
- @throws UnsupportedOperationException 这个元素不能被删除

## boolean retainAll(Collection c);

仅保留给定集合中的元素,删除其他元素。

抛出异常:

  • @throws UnsupportedOperationException
  • @throws ClassCastException
  • @throws NullPointerException

void clear();

移除所有元素。

抛出异常:

  • @throws UnsupportedOperationException

default Stream stream();

返回一个序列流。
默认实现:

default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
}

default Stream parallelStream();

返回一个并行流。
默认实现:

default Stream<E> parallelStream() {
    return StreamSupport.stream(spliterator(), true);
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/collection%e6%8e%a5%e5%8f%a3%e7%a0%94%e7%a9%b6/

(0)
彭晨涛彭晨涛管理者
上一篇 2019年11月8日
下一篇 2019年11月14日

相关推荐

  • Servlet4.0初识总结

    JavaEE8 JavaEE8,是自2013年6月Java企业版的首次更新。JAVAEE8提供了一些新的API,提供了对HTTP/2的新支持。 Servlet4.0 Servlet…

    Java 2019年11月28日
    02080
  • 深入理解java虚拟机第三版读书笔记12

    以下是第十二章 Java内存模型与线程的内容 硬件的效率与一致性 基于高速缓存的存储交互很好地解决了处理器与内存速度之间的矛盾,但是也为计算机系统带来更高的复杂度,它引入了一个新的…

    2020年1月29日
    01540
  • ThreadPoolExecutor源码分析-线程池如何实现线程复用?

    线程的复用问题 在开始看线程池的源码之前,先来看这么一个问题: 一个Thread对象可以重复地调用start()方法吗? 试试就知道了: @Test public void tes…

    2020年5月21日
    02550
  • Java自动装箱缓存机制

    尝试运行这段代码: 相似的两段代码,得到的结果却完全不相同。 首先要知道在java中==比较的是对象的引用,从直觉出发,无论是integer1、integer2还是integer3…

    Java 2019年12月5日
    0140
  • Java反射机制和动态代理详解

    反射 概念 反射机制: 指的是可以于运行时加载、探知、使用编译期间完全未知的类。 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够知道这个类的所有属性…

    Java 2020年2月15日
    0580
  • Java之UDP编程

    DatagramSocket概述 上次在Java网络套接字Socket编程那篇博客里只写了Socket和ServerSocket,即TCP通信,这次来补充一下UDP通信。 和Soc…

    Java 2020年3月11日
    0810
  • 遗留线程安全类Vector和HashTable简要源码分析

    总结 总结放前面防止太长不看 Vector Vector就是使用synchronized限制线程安全的一个List实现。 Vector是基于数组实现的,默认初始容量是10,在构造的…

    Java 2020年2月15日
    0700
  • JUC包下的线程协作计数CountDownLatch及CyclicBarrier

    CountDownLatch 概述 用来进行线程同步协作,等待所有线程完成倒计时。 其中构造参数用来初始化等待计数值,await() 用来等待计数归零,countDown() 用来…

    Java 2020年2月6日
    02010
  • HashMap源码分析

    HashMap是java中非常常见的一个数据结构,在这篇文章里,我依然以Map中的操作为导向来循序渐进研究HashMap中的源码,阅读这篇文章需要的前置知识有: 弱平衡的二叉查找树…

    Java 2020年2月12日
    0230
  • Java多线程基础

    多线程应用 异步调用 以调用方角度来讲,如果+ 需要等待结果返回,才能继续运行就是同步+ 不需要等待结果返回,就能继续运行就是异步 同步在多线程中还有另外一个意思,是让多个线程步调…

    2020年1月31日
    0350

发表回复

登录后才能评论