现在的位置: 首页 > 综合 > 正文

用java源代码学数据结构<一>: Collection , Iterator

2018年03月20日 ⁄ 综合 ⁄ 共 1899字 ⁄ 字号 评论关闭

      曾经某位大神说过:学习编程的最好方法就是看源代码。集合类无疑是学习数据结构好的原材料。开始准备用c++的STL,由于本人能力有限,看了下vc的STL源代码,什么一重指针,二重指针,n重指针漫天都是,所以只好放弃。java没有指针,学习难度无疑大大降低,STL就只有等以后能力提高点再说了。

      集合类的源代码都可以在jdk安装目录下的src.zip文件中找到,由于篇幅有限,删除了大量非必要注释。

     先来看下Collection.java文件

/*
 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.util;

/*
*   1.Collection接口是集合继承关系中的根接口(root interface),有些集合允许重复元素,
*	  有些集合有序,JDK不提供本接口的实现,只提供子接口的实现(例如Set,List)
*   2.所有实现Collection(或者其子接口)的类都必须包含两个构造函数:无参的构造函数,
*     以及参数为Collection的拷贝构造函数
*
*/
public interface Collection<E> extends Iterable<E> {
	
	//返回集合中存在的元素。如果元素的数目超过Integer.MAX_VALUE,返回Integer.MAX_VALUE
	int size();
	
	//当集合不包含任何元素时,返回true
	boolean isEmpty();
	
	//如果集合中包含至少一个指定对象,返回true
	boolean contains(Object o);
	
	//返回可以遍历集合元素的迭代器
    Iterator<E> iterator();
	
	//返回集合中所有元素组成的数组,数组元素的返回顺序要和迭代器访问集合元素的返回顺序一样
	Object[] toArray();
	
	//返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
	<T> T[] toArray(T[] a);
	
	//如果集合不允许重复元素,且集合中已经含有该元素,返回false
	boolean add(E e);
	
	//从此 collection 中移除指定元素的单个实例,如果集合中存在指定元素返回true。
	boolean remove(Object o);
	
	//如果此 collection 包含指定 collection 中的所有元素,则返回 true。
    boolean containsAll(Collection<?> c);
	
	//将指定 collection 中的所有元素都添加到此 collection 中
	boolean addAll(Collection<? extends E> c);
	
	//移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
	boolean removeAll(Collection<?> c);
	
	//仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
	boolean retainAll(Collection<?> c);
	
	//移除此 collection 中的所有元素(可选操作)。
	void clear();
	
	//比较此 collection 与指定对象是否相等。通过覆盖,实现list与list相等,set与set相等
	boolean equals(Object o);
	
	//返回此 collection 的哈希码值。
	int hashCode();
}

     下面是Iterator.java文件

package java.util;

/*
* Iterator和enumerations的不同点有两处:
* 1.Iterator运行调用者在迭代过程中删除集合元素
* 2.Iterator 改变了函数名
*/
public interface Iterator<E> {

	// 如果仍有元素可以迭代,则返回 true。
	boolean hasNext();
	
	//返回迭代的下一个元素
	E next();
	
	//从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次next的过程中只能调用一次
	void remove();
}

     以上是java集合类基本都要实现的两个接口,Collection提供集合类的一些必要方法,用于多态。Iterator类提供集合类元素的遍历,用于封装。

    一起学习,一起进步,欢迎访问我的博客:http://blog.csdn.net/wanghao109


抱歉!评论已关闭.