Collection接口介绍
2020-01-14 09:33:26来源:博客园 阅读 ()
Collection接口介绍
Collection接口介绍
- 一个Collection代表一组对象,是集合体系中的根接口。一些允许有重复的元素一些不允许,一些有顺序一些没有顺序。JDK不提供此接口具体类的直接实现,只会有子接口和抽象类的实现(如List和Set),此接口通常用于传递集合和需要最大通用性时使用(如以接口作为形参时);
- 所有此接口的实现类都应该提供一个无参构造器和一个以Collection和参数的有参构造器。这并不是语法上强制规定的而是java规范规定的,因为接口中不能包含构造器;
- 此接口实现类如果不支持某个方法,可以抛UnsupportedOperationException;
- 不同实现类对其所包含的元素可能会有不同的限制,如有的不允许添加null,有的对元素类型有限制。试图添加不符合条件的元素可能会抛出NullPointerException或ClassCastException,试图查询一个不符合条件的元素会抛出异常或返回false,这取决于不同的实现;
- 同步策略由每个实现类自己决定;
查询操作:
/** * 返回集合中元素的个数,如果元素个数超过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
原文链接:https://www.cnblogs.com/xiaohang123/p/12159075.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- 与JAVA集合相遇 2020-06-11
- 今天来介绍java 各版本的新特性,一篇文章让你了解 2020-06-10
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- Java生鲜电商平台-生鲜电商接口幂等性原理与防重复提交方案( 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash