Collection接口介绍

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

查询操作:

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

修改操作:

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

批量操作:

  1. /**
  2. * 如果this集合包含指定集合的所有元素,返回true
  3. * 如果该集合中元素的类型和this集合不相容,抛出ClassCastException异常(可选的限制条件)
  4. * 如果该集合中元素有一个或多个null并且this集合不允许null元素存在,那么抛出NullPointerException异常(可选的限制条件)
  5. */
  6. boolean containsAll(Collection<?> c);
  7.  
  8. /**
  9. * 将指定集合的所有元素到this集合中(可选的操作)。 如果指定的集合在操作进行时被修改了,那么此操作行为未定义。
  10. * (这意味着如果指定的集合是这个集合,并且这个集合是非空的,那么这个调用的行为是未定义的。) 如果调用结果改变了this集合返回true 如果
  11. * addAll操作不被此集合支持,那么抛出UnsupportedOpertaionException异常
  12. * 如果指定集合包含了空元素而this集合不允许有空元素,那么抛出NullPointerException异常
  13. * 如果this集合阻止hiding集合元素类型添加,那么抛出ClassCastException异常
  14. * 如果指定集合的元素的某些属性阻止将其添加到此集合,则抛出IllegalArgumentException
  15. * 由于插入限制,如果不是所有元素都可以在此时添加,则抛出IllegalStateException异常
  16. */
  17. boolean addAll(Collection<? extends E> c);
  18.  
  19. /**
  20. * 移除此集合中所有的包含在指定集合中的元素(可选的操作)。调用过此函数之后,那么此集合和指定集合将不再包含相同元素。 如果此集合因调用而更改那么返回true
  21. * 如果此集合不支持removeAll方法,则抛出UnsupportedOperationException
  22. * 如果集合中一个或多个元素的类型与指定集合不兼容,则抛出ClassCastException(可选的操作)
  23. * 如果该集合包含一个或多个空元素,且指定的集合不支持空元素(optional),或者指定的集合为空,则抛出NullPointerException异常
  24. */
  25. boolean removeAll(Collection<?> c);
  26.  
  27. /**
  28. * 移除此集合中所有符合给定Predicate的元素。在迭代期间或由Predicate引发的错误或运行时异常将被转发给调用方
  29. * 默认实现使用其迭代器遍历集合的所有元素。每一个匹配的元素使用iterator.remove()来移除。
  30. * 如果集合的iterator不支持移除将会抛出UnsupportedOperationException异常
  31. * 指定过滤器为空,抛出NullPointerException 如果移除操作不支持,抛出UnsupportedOperationException异常
  32. */
  33. default boolean removeIf(Predicate<? super E> filter) {
  34. Objects.requireNonNull(filter);
  35. boolean removed = false;
  36. final Iterator<E> each = iterator();
  37. while (each.hasNext()) {
  38. if (filter.test(each.next())) {
  39. each.remove();
  40. removed = true;
  41. }
  42. }
  43. return removed;
  44. }
  45.  
  46. /**
  47. * 只保留此集合中包含在指定集合中的元素(可选的操作) 也就是说,移除此集合中不包含在指定集合中的所有元素。 如果此集合改变了返回true
  48. * 如果此集合不支持retainAll,则抛出UnsupportedOperationException异常
  49. * 如果集合中一个或多个元素的类型与指定集合不兼容,则抛出ClassCastException(可选的操作)
  50. * 如果该集合包含一个或多个空元素,且指定的集合不支持空元素,或者指定的集合为空,抛出NullPointerException(可选的操作)
  51. */
  52. boolean retainAll(Collection<?> c);
  53.  
  54. /**
  55. * 移除此集合中的所有元素,此方法调用后,此集合应该为空 如果此集合clear操作不支持将会抛出UnsupportOperationException异常。
  56. */
  57. void clear();

比较和hash:

  1. boolean equals(Object o);
  2.  
  3. int hashCode();

默认方法:

  1. /**
  2. * 默认方法, 多线程中用的到,暂时不做讨论
  3. */
  4. default Spliterator<E> spliterator() {
  5. return Spliterators.spliterator(this, 0);
  6. }
  7.  
  8. default Stream<E> stream() {
  9. return StreamSupport.stream(spliterator(), false);
  10. }
  11.  
  12. default Stream<E> parallelStream() {
  13. return StreamSupport.stream(spliterator(), true);
  14. }

参考: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. 安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)

    VM tools:方便我们虚拟机和宿主机之间复制数据或移动文件等 安装VMtools 1.菜单栏-虚拟机-安装VM tools 将其选中 2.进入系统,在桌面位置里面有VM tools的光盘,双击进入 ...

  2. POJ 1845:Sumdiv 快速幂+逆元

    Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16466   Accepted: 4101 Descripti ...

  3. ssm搭建,maven,javaConfig

    基于java配置SSM,eclipse 新建maven,web项目 .... 项目结构: jar包 pom.xml spring和DispatcherServlet上下文,相当于web.xml pub ...

  4. BGP的地址聚合

    aggregate-address ip make——多用于地址聚合命令. 但,因此很容易产生路由环路. 所以多加一个参数. as-set as-set,可以是BGP聚合路不丢失原来的AS-Path属 ...

  5. 剑指offer_12.31_Day_1

    不用加减乘除做加法 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号.   不用四则运算,必然是依靠位运算. 位运算包括,与,或,异或,取反,左移,右移. 分别为 ...

  6. struts2模型驱动传值问题

    控制台错误提示: 2020-01-08 18:34:40,292 [http-nio-8080-exec-3] [org.apache.struts2.dispatcher.Dispatcher]-[ ...

  7. Python Email发送,通知业务完成

    Email 发送 #!/usr/bin/python # -*- coding: UTF-8 -*- import base64 import smtplib from email.mime.text ...

  8. 建立更可靠的OOP程序-类和成员的访问控制

    1. public 成员(公共成员) (1)使用this 关键字的类的成员允许在任何地方被访问. (2)使用 prototype 定义的属性和方法都是公共成员. 这些属性和方法可以在外面任何地方被访问 ...

  9. CTF -bugku-web-web基础 矛盾

    ---恢复内容开始--- 以GET方式获取参数 is_numeric()函数是判断是否为数字或者数字字符串 所以不能是数字或者数字字符串,但是下面$num == 1 有要求为数字1 所以构造1+任意字 ...

  10. 监听配置问题,SID与Service_Name区别

    监听配置问题,SID与Service_Name区别 1.数据库实例名SID 概念:数据库实例名用于和操作系统进行联系的标识,是数据库和操作系统之间的交互用的书数据库实例名.实例名也被写入参数文件中,该 ...