java.util.Collection<E> 源码分析(JDK1.7)

---------------------------------------------------------------------------------

java.util.Collection<E>是一个接口,它的定义如下:

 public interface Collection<E> extends Iterable<E> {
// Query Operations
// Modification Operations
// Bulk Operations
// Comparison and hashing
}

(1)从定义中可以看出Collection接口中定义了:查询方法、修改方法、批量操作方法、哈希和比较方法。

(2)Collection是一个根接口,表示一组对象,这些对象也称为collection的元素。

(3)Collection的实现类中有这样的特征: 有些collection是允许重复元素的;有些collection是不允许重复元素的;有些collection是有序的;有些collection是无序的。

(4)JDK不提供对Collection接口的直接实现,而且提供了两个更为具体的接口去实现(如:java.util.List和java.util.Set)

----------------------------------------------------------------------------------

下面来看看java.util.Collection<E>中具体有哪些方法

从下面的表格中可以看出java.util.Collection<E>接口中一共有15个方法,其中查询操作6个;修改操作2个;批量操作5个;比较和哈希操作2个。

查询操作 int size() 返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE
boolean isEmpty() 如果此 collection 不包含元素,则返回 true,否则返回false
boolean contains(Object o) 如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少包含一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,返回 true
Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器。关于元素返回的顺序没有任何保证(除非此 collection 是某个能提供保证顺序的类实例)。
Object[] toArray() 返回包含此 collection 中所有元素的数组。如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。
<T> T[] toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将分配一个具有指定数组的运行时类型和此 collection 大小的新数组。
修改操作 boolean add(E e) 将元素e添加到此集合中,如果添加成功则返回true,添加失败则返回false
boolean remove(Object o) 从此 collection 中移除指定元素o的单个实例,如果操作成功则返回true,操作失败则返回false
批量操作 boolean containsAll(Collection<?> c ) 如果此 collection 包含指定 collection 中的所有元素,则返回 true
addAll(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中.
boolean removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素。
boolean retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素。
void  clear() 移除此 collection 中的所有元素。
比较和哈希操作 boolean equals(Object o) 比较此 collection 与指定对象是否相等
int hashCode() 返回此 collection 的哈希码值

----------------------------------------------------------------------------------

java.util.Collection<E>源码如下:(看看下面的源码,定义的很规范,各种操作都有-----> 此时应该想到它的实现类该有多可怜,要实现多少方法呀。~_~)

 package java.util;

 public interface Collection<E> extends Iterable<E> {
// Query Operations int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a); // Modification Operations boolean add(E e); boolean remove(Object o); // Bulk Operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); // Comparison and hashing boolean equals(Object o); int hashCode();
}

----------------------------------------------------------------------------------

----------------------------------------------------------------------------------

源码(03) -- java.util.Collection<E>的更多相关文章

  1. 源码(09) -- java.util.Arrays

    java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...

  2. 源码(05) -- java.util.AbstractCollection<E>

    java.util.AbstractCollection<E> 源码分析(JDK1.7) ------------------------------------------------- ...

  3. 源码(04) -- java.util.List<E>

    java.util.List<E> 源码分析(JDK1.7) --------------------------------------------------------------- ...

  4. JDK1.8源码(五)——java.util.Vector类

    JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html

  5. 源码(06) -- java.util.AbstractList<E>

    java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...

  6. 源码(07) -- java.util.Iterator<E>

    java.util.Iterator<E> 源码分析(JDK1.7) ----------------------------------------------------------- ...

  7. JDK1.8源码(五)——java.util.ArrayList 类

    关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的. 1.ArrayList 定义 ArrayList 是一个用数组实 ...

  8. JDK1.8源码(六)——java.util.LinkedList 类

    上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表 ...

  9. Java源码之 java.util.concurrent 学习笔记01

    准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...

随机推荐

  1. unity3d热更新解决方案,使用ulua插件开发的框架。

    ulua插件下载地址 www.ulua.org,下面要说的是ulua的开发框架. 首先是 LuaLoader 类,它负责把一个 lua 的 table 加载起来,使此 lua 的 table 像一个 ...

  2. Arduino线程库ProtoThreads

    参考: Arduino线程库ProtoThreads 一个“蝇量级” C 语言协程库

  3. 图片拉伸iOS

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight: (NSInteger)topCa ...

  4. iOS开发——判断手机格式

    添加NSString分类 1.在NSString+Check.h中,添加方法: -(BOOL)checkPhoneNumInput; 2.在NSString+Check.m文件中: -(BOOL)ch ...

  5. iOS纯代码手动适配 分类: ios技术 2015-05-04 17:14 239人阅读 评论(0) 收藏

    首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述:第二种方法是和之前iPhone5的类似,比较简单,为iPho ...

  6. API WAVE 专栏

    关于音频输入.输出设备的使用 源:API WAVE 专栏

  7. builds error

    使用cocoapods 出现Undefined symbols for architecture i386: _OBJC_CLASS_$_XXXXXXX", referenced from: ...

  8. cocos2d-x介绍

    总体来说,cocos2d-x是一个优秀的库. Cocos2d-x没有很复杂的一个架构,基本上是一些以单件形式提供的管理器和是一些围绕SceneGraph(CCNode及其派生类)展开的类.这个设计使得 ...

  9. EclipseEE导入项目出现的那些问题

    1.显示.project文件丢失, 解决方法:在eclipse中删除和该项目相同的文件名,重新import即可 2.导入没有.classpath和.project文件的项目 解决方法:目前没遇到 3. ...

  10. linux系统安装iprouter

    在上文中将mpls编译进了linux内核,现在需要安装iprouter,安装过程如下: 1) 下载两个文件iproute2-2.6.39.tar.gz和iproute2-v2.6.39-mpls.pa ...