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

2014-11-24 08:51:44 · 作者: · 浏览: 0
曾经某位大神说过:学习 编程的最好方法就是看源代码。集合类无疑是学习数据结构好的原材料。开始准备用c++的STL,由于本人能力有限,看了下 vc的STL源代码,什么一重指针,二重指针,n重指针漫天都是,所以只好放弃。java没有指针,学习难度无疑大大降低,STL就只有等以后能力提高点再说了。
集合类的源代码都可以在jdk安装目录下的src.zip文件中找到,由于篇幅有限,删除了大量非必要注释。
先来看下Collection.java文件
[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 extends Iterable {
//返回集合中存在的元素。如果元素的数目超过Integer.MAX_VALUE,返回Integer.MAX_VALUE
int size();
//当集合不包含任何元素时,返回true
boolean isEmpty();
//如果集合中包含至少一个指定对象,返回true
boolean contains(Object o);
//返回可以遍历集合元素的迭代器
Iterator iterator();
//返回集合中所有元素组成的数组,数组元素的返回顺序要和迭代器访问集合元素的返回顺序一样
Object[] toArray();
//返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
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文件
[java]
package java.util;
/*
* Iterator和enumerations的不同点有两处:
* 1.Iterator运行调用者在迭代过程中删除集合元素
* 2.Iterator 改变了函数名
*/
public interface Iterator {
// 如果仍有元素可以迭代,则返回 true。
boolean hasNext();
//返回迭代的下一个元素
E next();
//从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次next的过程中只能调用一次
void remove();
}
以上是java集合类基本都要实现的两个接口,Collection提供集合类的一些必要方法,用于多态。Iterator类提供集合类元素的遍历,用于封装