Collection接口介绍

  1. 一个Collection代表一组对象,是集合体系中的根接口。一些允许有重复的元素一些不允许,一些有顺序一些没有顺序。JDK不提供此接口具体类的直接实现,只会有子接口和抽象类的实现(如List和Set),此接口通常用于传递集合和需要最大通用性时使用(如以接口作为形参时);
  2. 所有此接口的实现类都应该提供一个无参构造器和一个以Collection和参数的有参构造器。这并不是语法上强制规定的而是java规范规定的,因为接口中不能包含构造器;
  3. 此接口实现类如果不支持某个方法,可以抛UnsupportedOperationException;
  4. 不同实现类对其所包含的元素可能会有不同的限制,如有的不允许添加null,有的对元素类型有限制。试图添加不符合条件的元素可能会抛出NullPointerException或ClassCastException,试图查询一个不符合条件的元素会抛出异常或返回false,这取决于不同的实现;
  5. 同步策略由每个实现类自己决定;

查询操作:

/**
* 返回集合中元素的个数,如果元素个数超过Integer.MAX_VALUE,则返回Integer.MAX_VALUE
*/
int size();
/**
* 判断集合中元素是否为空
*/
boolean isEmpty();
/**
* 判断集合中是否包含指定元素
*/
boolean contains(Object o);
/**
* 返回一个迭代器,不保证迭代器中元素的顺序,除非改集合实现类本身提供了保证
*/
Iterator<E> iterator();
/**
* 将集合转换为数组,数组中元素的顺序与该集合产生迭代器中的顺序一致
*这个方法是数组和列表之间的桥梁
*/
Object[] toArray();
/**
* 返回一个集合元素类型的数组。如果集合满足指定的数组并且有足够的空间,则在其中返回此集合
*否则返回此集合大小的新数组。
*如果集合有序,那么返回此集合迭代器遍历顺序的数组
*如果数组大小比集合元素多,那么在数组满足集合元素后在末尾设置为null
*如果在数组中元素的类型不是集合中元素类型的超类,那么抛ArrayStoreException异常
*如果指定数组为空,则抛出NullPointerException
*/
<T> T[] toArray(T[] a);

修改操作:

/**
* 确保此集合包含特定的元素类型。 如果此集合增加元素成功返回true。 如果此集合不允许有重复元素并且已经包含所传参数,那么返回false
* 支持此操作的集合可能会限制向该集合添加哪些元素。特别的,有些集合会拒绝null元素,有些会对要增加的元素强加一些限制。
* Collection实现类应该在文档中明确指出所有的限制。
* 如果集合以除已经包含元素之外的任何原因拒绝添加特定元素,则必须抛出异常,(而不是返回false)。 这保留了集合在此调用返回后始终包含指定元素的不变式。
*/
boolean add(E e); /**
* 如果集合中包含此元素,则移除该元素; 如果集合中包含多个这样的元素,则移除满足(o==null?e==null:o.equals(e))的元素;
* 如果集合因该方法的调用而发生改变,则返回true; 如果指定元素的类型和集合不相容,抛出ClassCastException异常(可选的限制条件);
* 如果指定元素是null并且这个集合不允许null元素存在,那么抛出NullPointerException异常(可选的限制条件)
* 如果此集合不支持remove操作那么抛出UnsupportedOperationException异常(可选的限制条件)
*/
boolean remove(Object o);

批量操作:

/**
* 如果this集合包含指定集合的所有元素,返回true
* 如果该集合中元素的类型和this集合不相容,抛出ClassCastException异常(可选的限制条件)
* 如果该集合中元素有一个或多个null并且this集合不允许null元素存在,那么抛出NullPointerException异常(可选的限制条件)
*/
boolean containsAll(Collection<?> c); /**
* 将指定集合的所有元素到this集合中(可选的操作)。 如果指定的集合在操作进行时被修改了,那么此操作行为未定义。
* (这意味着如果指定的集合是这个集合,并且这个集合是非空的,那么这个调用的行为是未定义的。) 如果调用结果改变了this集合返回true 如果
* addAll操作不被此集合支持,那么抛出UnsupportedOpertaionException异常
* 如果指定集合包含了空元素而this集合不允许有空元素,那么抛出NullPointerException异常
* 如果this集合阻止hiding集合元素类型添加,那么抛出ClassCastException异常
* 如果指定集合的元素的某些属性阻止将其添加到此集合,则抛出IllegalArgumentException
* 由于插入限制,如果不是所有元素都可以在此时添加,则抛出IllegalStateException异常
*/
boolean addAll(Collection<? extends E> c); /**
* 移除此集合中所有的包含在指定集合中的元素(可选的操作)。调用过此函数之后,那么此集合和指定集合将不再包含相同元素。 如果此集合因调用而更改那么返回true
* 如果此集合不支持removeAll方法,则抛出UnsupportedOperationException
* 如果集合中一个或多个元素的类型与指定集合不兼容,则抛出ClassCastException(可选的操作)
* 如果该集合包含一个或多个空元素,且指定的集合不支持空元素(optional),或者指定的集合为空,则抛出NullPointerException异常
*/
boolean removeAll(Collection<?> c); /**
* 移除此集合中所有符合给定Predicate的元素。在迭代期间或由Predicate引发的错误或运行时异常将被转发给调用方
* 默认实现使用其迭代器遍历集合的所有元素。每一个匹配的元素使用iterator.remove()来移除。
* 如果集合的iterator不支持移除将会抛出UnsupportedOperationException异常
* 指定过滤器为空,抛出NullPointerException 如果移除操作不支持,抛出UnsupportedOperationException异常
*/
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;
} /**
* 只保留此集合中包含在指定集合中的元素(可选的操作) 也就是说,移除此集合中不包含在指定集合中的所有元素。 如果此集合改变了返回true
* 如果此集合不支持retainAll,则抛出UnsupportedOperationException异常
* 如果集合中一个或多个元素的类型与指定集合不兼容,则抛出ClassCastException(可选的操作)
* 如果该集合包含一个或多个空元素,且指定的集合不支持空元素,或者指定的集合为空,抛出NullPointerException(可选的操作)
*/
boolean retainAll(Collection<?> c); /**
* 移除此集合中的所有元素,此方法调用后,此集合应该为空 如果此集合clear操作不支持将会抛出UnsupportOperationException异常。
*/
void clear();

比较和hash:

    boolean equals(Object o);

    int hashCode();

默认方法:

/**
* 默认方法, 多线程中用的到,暂时不做讨论
*/
default Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 0);
} default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
} default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}

参考:https://www.jianshu.com/p/ef2990140d05

Collection接口介绍的更多相关文章

  1. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  2. Java集合之Collection接口

    java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口. 一些Collection允 ...

  3. Collection接口都是通过Iterator()(即迭代器)来对Set和List遍历

    以下介绍接口: List接口:(介绍其下的两个实现类:ArrayList和LinkedList) ArrayList和数组非常类似,其底层①也用数组组织数据,ArrayList是动态可变数组. ① 底 ...

  4. Collection接口的子接口——Queue接口

    https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html public interface Queue<E> exten ...

  5. 谈谈Java的Collection接口

    目录 谈谈Collection 前言 Collection 方法 1.boolean add(E) 2.void clear() 3.boolean contains(Object o) 4.bool ...

  6. Collection接口

    Collection接口所定义的方法: clear:清空 retainAll 求一个Collection和另一个 Collection的交集. object[] toArray()  把里面的各个对象 ...

  7. 集合中Set接口与Collection接口,常用子类TreeSet,HashSet.

    Set接口与List接口的不同之处在于: 不允许有重复的数据. 定义如下: public interface Set<E>extends Collection<E> 主要方法与 ...

  8. 类集-collection接口

    类集就是一个动态的对象数组,与一般的对象数组不同,类集的对象类容可以随意扩充. 1,对象数组使用的时候会存在一个长度的限制,那么类集是专门解决这种限制的.使用类集可以向数组增加任意多的数据. 2,对象 ...

  9. 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结

    List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. ...

随机推荐

  1. Linux每日一练20200220

  2. 执行 composer update 命令的时候报 Your requirements could not be resolved to an installable set of packages. 错误

    Your requirements could not be resolved to an installable set of packages. 以上原因:不匹配composer.json要求的版 ...

  3. 【LeetCode】解数独

    做题之前先复习下[STL中的Tuple容器] 我们知道,在Python中,大家都知道tuple这个概念,是一个只读的元素容器,容器内的元素数据类型可以不同,而在CPP中大部分的容器只能储存相同数据类型 ...

  4. 当chart图遇上bootstrap的TAB切换 无宽高问题?

    .tab-content > .tab-pane, .pill-content > .pill-pane {    display: block; /* undo display:none ...

  5. BZOJ 4029 [HEOI2015]定价

    题解: !!!!!! 分类讨论,情况挺多 #include<iostream> #include<cstdio> #include<cstring> using n ...

  6. Maven - pom.xml 文件

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Maven – 构建生命周期.阶段 ...

  7. 《Thinking in Java》中讲到了final,发现自己有部分地方迷糊

    1.1当给全局的静态字段加上final时,系统是不会给其赋默认值的,若不手动初始化,会编译时错误——Variable 'xxx' might not have been initialized. 1. ...

  8. SAP_BASIS常用事务代码

    1.SM66:监控当前系统的所有进程: 2.SM50/SM51:监视当前客户端的所有进程: 3.AL08:查看系统当前用户登录情况: 4.ST22:查看系统发生的DUMP: 5.ST03:查看系统当前 ...

  9. git 一些操作

    1. 代码相关 克隆代码 git clone xxx.git 拉取代码 git pull 查看 修改的 状态 git status 推送代码 git push add 或者 修改代码之后 回滚到 未修 ...

  10. 如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学

    编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面 ...