文档章节

jdk1.6的集合源码阅读之Collection接口

双月通天
 双月通天
发布于 2016/08/23 11:20
字数 664
阅读 14
收藏 0

        我们知道java容器类类库的用途是“保存对象”,容器最顶层分为两个Collection和Map,其余的都是继承这连个接口,Collection存储一个独立元素的序列,下面有List 、Set、Queue,而Map主要存储 “键值对”对象,下面实现版本有hashMap和TreeSet。(而List、Set、Queue下面基本各有两三个实现版本。)

        既然我们要阅读容器类的jdk源码,当然得从Collection开始,他是大部分容器类的父接口,里面只有函数声明,声明了一组Collection类型容器的操作方法,但是没有实现,等其子类去实现。其代码如下(基于jdk1.6):

 

 


package java.util;



public interface Collection<E> extends Iterable<E> {
    
    //返回容器中元素的个数 
    int size();

    //如果集合元素为空,返回true,否则false
    boolean isEmpty();
  
	//如果集合包含这个元素,返回true,否则false,如果元素类型和本集合不一样,抛出ClassCastException异常,如果元素null,而集合不允许为null,则抛出NullPointerException     
    boolean contains(Object o);

	//返回集合类的迭代器,可以用来遍历容器中的元素     
    Iterator<E> iterator();

 
	//将该集合转换为数组     
    Object[] toArray();

    
	//将集合类转换为更为具体类型的数组   
    <T> T[] toArray(T[] a);

   
	//将元素添加到容器,成功返回true   
    boolean add(E e);

  
	//从容器中删除元素,成功返回true
    boolean remove(Object o);


    //大块操作

   
	//如果容器包含c容器里面的所有元素,则返回true     
    boolean containsAll(Collection<?> c);

    
	//添加一个集合他容器中
    boolean addAll(Collection<? extends E> c);

    
	//删除集合中所包含的c集合里面的元素,类似求交集  
    
    boolean removeAll(Collection<?> c);

   
	//容器中只留下和c集合里面相同的元素,c集合的内容不变,变的是自己    
    boolean retainAll(Collection<?> c);

 
	//移除容器中所有的元素  
    void clear();


    // Comparison and hashing

    
	//指定的对象与本集合进行比较,判断相等性    
    boolean equals(Object o);

    
	//返回这个集合的hash code
    int hashCode();
}

 

可以看的出Collection继承了Iterable接口,而Iterable接口的内容如下:

取迭代器接口类

public interface Iterable<T> {

    /**
     * 返回一个在类型T的元素集合上的迭代器。
     * 
     * @return an Iterator.
     */
    Iterator<T> iterator();
}

所以以后只要你创建了实现该Iterable的类,就可以用foreach语句来遍历了,所以所有的继承Collection都可以用foreach语句来遍历了。

迭代器接口类

public interface Iterator<E> {
    //判断是否还有元素  
    boolean hasNext();

    //返回下一个元素
    E next();

    //删除元素
    void remove();
}

 

© 著作权归作者所有

双月通天
粉丝 40
博文 324
码字总数 300254
作品 0
徐汇
程序员
私信 提问
jdk1.6的集合源码阅读之ArrayList

简述 ArrayList其实就是动态数组,是Array的复杂版本,动态扩容和缩容,灵活的设置数组的大小,等等。 其定义如下 而AbstractCollection实现了Collection的部分方法和AbstractList继承了该A...

双月通天
2016/08/23
38
0
jdk1.6集合源码阅读之HashMap

本来ArrayList和LinkedList弄完,应该去查看set接口的一些实现了,比如HashSet和TreeSet的实现了,但是看了下HashSet的底层存储是HashMap,所以决定先看HashMap的源码,看完再看HashSet的源码...

双月通天
2016/08/26
30
0
Java源码分析:深入探讨Iterator模式

Java源码分析:深入探讨Iterator模式 作者:兄弟连 www.itxdl.cn  java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的...

疯狂的小黑
2016/10/31
23
0
【Java入门提高篇】Java集合类详解(一)

今天来看看Java里的一个大家伙,那就是集合。 集合嘛,就跟它的名字那样,是一群人多势众的家伙,如果你学过高数,没错,就跟里面说的集合是一个概念,就是一堆对象的集合体。集合就是用来存...

MFrank
2018/05/18
0
0
Map大家族的那点事儿(2) :AbstractMap

原文出处:SylvanasSun’s Blog AbstractMap AbstractMap是一个抽象类,它是Map接口的一个骨架实现,最小化实现了此接口提供的抽象函数。在Java的Collection框架中基本都遵循了这一规定,骨架...

SylvanasSun’s Blog
2018/09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

云栖干货回顾 | 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。AnalyticDB PG通过行存...

大涛学弟
25分钟前
4
0
TL138/1808/6748-EasyEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。开...

Tronlong创龙
29分钟前
3
0
开普勒平台开源版

https://github.com/kplcloud/kplcloud

perofu
32分钟前
4
0
昨天,这项阿里技术再获世界级科技大奖!

第六届世界互联网大会来了!千年水乡古镇乌镇又一次吸引了全世界的目光。 昨天,阿里云自研数据库POLARDB 在会上当选世界互联网领先科技成果。POLARDB解决了企业在云时代的数据库难题,帮助企...

阿里云官方博客
32分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部