Collection<E>接口
https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
public interface Collection<E> extends Iterable<E>
E,代表这个集合中的元素类型。
父接口:Iterable<E>
子接口:BeanContext, BeanContextServices, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>, TransferQueue<E>
一、简介
Collection<E>是Java集合框架的一个根接口(另一个是Map)。
JDK并不提供此接口的任何直接实现(类),而是提供了Collection接口的一些子接口的实现,如Set接口和List接口。所以这个接口通常用来在需要最大通用性的地方传递集合并对其进行操作。
Bags or multisets(可能包含重复元素的无序集合),应该直接实现这个接口。
所有一般用途的Collection实现(类) (通常是通过Collection接口的子接口间接实现),都应该提供两个标准构造函数:
- 第一个,一个无参构造函数,用来创建一个空的集合
- 第二个,一个有单个Collection类型的参数的构造函数,用来创建一个新集合,包含和它的参数类型一致的元素。
实际上,第二种构造函数允许用户复制任何集合,来生成所需实现类型的等效集合。当然你也没法强制执行这个规约,因为接口不包含构造函数,但Java平台库中的所有通常用途的Collection实现(类)都遵守这个规约。
此接口中的 "破坏性 " 方法 (即修改它们所操作的集合的方法) 被指定为在该集合不支持该操作时抛出 UnsupportedOperationException异常。但如果方法的调用对集合没有影响,则这些方法可能(但不是一定)抛出UnsupportedOperationException。例如, 如果要添加的集合为空, 则在不可修改集合上调用 addAll (Collection) 方法可能 (但不是一定) 引发异常。
某些集合实现对它们可能包含的元素有限制。例如, 某些实现禁止空元素, 有些则对其元素的类型有限制。
尝试添加不合格的元素会引发未检查的异常, 通常为 NullPointerException or ClassCastException。
尝试查询不合格元素的存在可能引发异常, 也可能只是返回 false。一些实现将展示前者的行为, 有些将展示后者。
通常,尝试对不合格元素进行操作可能会成功,也可能引发异常。但是其完成不会导致将不合格的元素插入到集合中
每种集合可以自定义它的同步策略。
在没有实现类的强保证下,调用一个正在被其它线程(占用)修改的集合中的方法可能导致未知的行为,这包括直接调用、将集合传递给可能执行调用的方法以及使用现有迭代器检查集合。
集合框架接口中的许多方法是根据equals方法定义的。例如,contains(Object o)方法的规范指出“当且仅当这个集合包含至少一个这样的e元素时(o==null?e==null:o.equals(e)),返回true”。这条规范不应被解释为它表明使用非空参数o调用Collection.contains()方法时,将导致操作o.equals(e)对每个元素e都进行(有至少一个就行了)。
实现类则可以自由地进行优化,从而避免调用equals方法。例如,比较两个元素(对象)的hashcode(两个hashcode不相等的object,我们定义为不相等)。
更普遍地,集合框架中不同接口的实现类可以自由地在合适的地方利用Object抽象类中指定的方法。
对集合执行递归遍历的某些集合操作可能会因为该集合直接或者间接包含自身引用的实例而失败,也会有一个异常提示这种情况。
默认的方法实现(如通过继承获得)不适用与任何的同步协议,如果一个集合实现类有一个特定的同步协议,那么它必须重写这些默认的方法,以可以适配相应的同步协议。
二、接口方法
1、int size()
2、boolean isEmpty()
3、boolean contains(Object o)
4、Iterator<E> iterator()
5、Object[] toArray()
6、<T> T[] toArray(T[] a)
7、boolean add(E e)
8、boolean remove(Object o)
9、boolean containsAll(Collection<?> c)
10、boolean addAll(Collection<? extends E> c)
11、boolean removeAll(Collection<?> c)
12、default boolean removeIf(Predicate<? super E> filter)
13、boolean retainAll(Collection<?> c)
14、void clear()
15、boolean equals(Object o)
16、int hashCode()
17、default Spliterator<E> spliterator()
18、default Stream<E> stream()
19、default Stream<E> parallelStream()
Collection<E>接口的更多相关文章
- JDK源码阅读(三) Collection<T>接口,Iterable<T>接口
package java.util; public interface Collection<E> extends Iterable<E> { //返回该集合中元素的数量 in ...
- Java基础-Collection子接口之Set接口
Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...
- Java基础-Collection子接口之List接口
Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...
- Java Collection集合接口
Collection接口是赖以集合框架建立的基础.它声明的所有集合的核心方法.这些方法概括于下表中. 因为所有集合都要实现Collection,熟悉它的方法是对框架有清晰的认识很有必要.这几种方法都可 ...
- Collection子接口(List/Set/Queue/SortedSet)
Collection基本的子接口: List:能够存放反复内容 Set:不能存放反复内容,全部反复的内容靠hashCode()和equals()两个方法区分 Queue:队列接口 SortedSet: ...
- java学习笔记——Collection集合接口
NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...
- java 数据结构(十):Collection子接口:Set接口
1. 存储的数据特点:无序的.不可重复的元素具体的: 以HashSet为例说明:1. 无序性:不等于随机性.存储的数据在底层数组中并非照数组索引的顺序添加,而是根据数据的哈希值决定的.2. 不可重复性 ...
- java 数据结构(九):Collection子接口:List接口
1. 存储的数据特点:存储序的.可重复的数据. 2. 常用方法:(记住)增:add(Object obj)删:remove(int index) / remove(Object obj)改:set(i ...
- Collection子接口:Set接口
1.Set 存储的数据特点:无序的.不可重复的元素具体的:以HashSet为例说明: 1. 无序性:不等于随机性.存储的数据在底层数组中并非照数组索引的顺序添加,而是根据数据的哈希值决定的. 2. 不 ...
随机推荐
- Keras学习笔记二:保存本地模型和调用本地模型
使用深度学习模型时当然希望可以保存下训练好的模型,需要的时候直接调用,不再重新训练 一.保存模型到本地 以mnist数据集下的AutoEncoder 去噪为例.添加: file_path=" ...
- C++入门经典-类成员的可访问性,继承后的可访问性
1:关键字public.private.protected说明类成员是共有的.私有的,还是保护的.这3个关键字将类划分为3个区域,在public区域的类成员可以在类作用域外被访问,而private区域 ...
- 关于colab的一些技巧
1.指定工作文件夹(运行可以相对路径!) # 指定当前的工作文件夹 import os # 此处为google drive中的文件路径,drive为之前指定的工作根目录,要加上 os.chdir(&q ...
- Asp.Net WebAPI 通过HttpContextBase或者HttpRquest 获取请求参数
WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqest ...
- 编译内核时报错./include/net/sch_generic.h:535:28: error: inlining failed in call to always_inline 'qdisc_pkt_len': indirect function call with a yet undetermined callee static inline unsigned int qdisc_pkt_
直接修改头文件include/net/sch_generic.h中的qdisc_pkt_len函数 将static inline unsigned int qdisc_pkt_len修改为: stat ...
- JAVA向C传递数据
传递数组 数组是个对象,传递对象就是传递地址,修改地址上的值,数组的内容就会改变 //获取数组首地址 int* p = (*env)->GetIntArrayElements(env, arra ...
- Tag 标签
用于标记和选择. 基础用法 由type属性来选择tag的类型,也可以通过color属性来自定义背景色. <el-tag>标签一</el-tag> <el-tag type ...
- redis5.0编译安装
##################### linux下运行redis 1.下载源码 https://redis.io/ 2.将源码上传到服务器中,进行编译安装 a)可以使用rz进行上传(sz是将服务 ...
- 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境
使用这个jar包来跨服务器上传 搞两个tomcat.一个springmvc一个fileupload 选中tomcat server点击左边的加号 需要改端口和JMX pport这个端口 部署文件上传的 ...
- Access denied for user XX
解决方法:将pom.xml中的mysql-connector-java降低版本(直接去maven仓库复制:https://mvnrepository.com/),比如: <!-- https:/ ...