博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK1.7源码分析01-Collection
阅读量:6711 次
发布时间:2019-06-25

本文共 2301 字,大约阅读时间需要 7 分钟。

同步发布:

Java的集合类主要由两个接口派生而出:Collection和Map。Collection是一个接口,它主要的两个分支为List和Set,Map的介绍会在后面的系列中进行详细的分析。如下图所示为Collection接口、子接口及其实现类的继承树。

源码分析如下:

package java.util;/** * Collection继承了迭代器的接口,即整个集合类都采用了迭代器模式 */public interface Collection
extends Iterable
{ // Query Operations /** * 返回集合的大小。 * 如果集合的大小超过Integer.MAX_VALUE,则返回Integer.MAX_VALUE */ int size(); /** * 判断集合是否为空 */ boolean isEmpty(); /** * 判断集合中是否有元素o。 * 这里要特别注意下元素o是否与集合里的元素类型兼容,以及o是否为null */ boolean contains(Object o); /** * 返回集合中元素的迭代器,但不能保证返回顺序(除非集合指定了顺序) */ Iterator
iterator(); /** * 返回一个数组(包含集合中所有的元素)。 * 如何集合中的元素是有序的,则返回的数组中的元素也是有序的。 * 这个方法可用于集合与数组之间的转换 */ Object[] toArray(); /** * 以数组形式返回指定数组类型的集合元素 */
T[] toArray(T[] a); // Modification Operations /** * 用于向集合里添加元素 * 如果集合对象被添加操作改变了则返回true */ boolean add(E e); /** * 删除元素 */ boolean remove(Object o); // Bulk Operations /** * 用来判断是否含有指定集合c中的所有元素 */ boolean containsAll(Collection
c); /** * 将指定集合c中的所有元素添加至调用者的集合中 */ boolean addAll(Collection
c); /** * 删除集合中所包含的c里面的元素 */ boolean removeAll(Collection
c); /** * 保留与集合c中相同的元素(即移除与指定集合不同的元素) * 相当于把调用该方法的集合变成该集合和集合c的交集 */ boolean retainAll(Collection
c); /** * 清除集合里的所有元素,集合长度变为0 */ void clear(); // Comparison and hashing /** * 判断与指定元素是否相等 */ boolean equals(Object o); /** * 返回集合的哈希码值 */ int hashCode();}

Collection继承了Iterable,如图所示:

Iterable源码分析如下:

/** * 迭代器接口 */public interface Iterable
{ /** * 返回元素类型为T的迭代器 */ Iterator
iterator();}

其中Iterator的源码如下:

/** * 迭代器接口类 */public interface Iterator
{ /** * 如果被迭代的集合元素还没有被遍历,则返回true */ boolean hasNext(); /** * 返回集合里的下一个元素 */ E next(); /** * 删除集合里上一次next方法返回的元素 */ void remove();}

Iterator仅用于遍历集合,Iterator本身并不提供装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。Iterator必须依附于Collection对象,如有一个Iterator对象,则必然有一个与之关联的Collection对象。特别要注意的是,当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。  

 

  

转载地址:http://lfalo.baihongyu.com/

你可能感兴趣的文章
Esper学习之十四:Pattern(一)
查看>>
js,jquery,css,html5特效
查看>>
Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
查看>>
lintcode: 旋转图像
查看>>
NoSQL 数据库产品学习总结(一)
查看>>
redis linux 基本命令
查看>>
MD5算法实现
查看>>
基于Solr实现HBase的二级索引
查看>>
http://www.360doc.com/content/12/0516/14/1671317_211422841.shtml
查看>>
tldr 的安卓客户端
查看>>
MySQL主从数据库同步延迟问题解决(转)
查看>>
JS实现表格排序
查看>>
深刻理解Java编程的7个例子
查看>>
虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
查看>>
hibernate一对一主键双向关联
查看>>
SVN 多分支管理
查看>>
用现代化的方式开发一个图片上传工具
查看>>
log4j email EmailDailyRollingFileAppender
查看>>
Js页面刷新前提示-jquery页面刷新事件
查看>>
基于STM32的学习型通用红外遥控设备的设计实现(三)
查看>>