这里选择的是JDK 1.6版本的源码,为的是暂时不去纠结一些JAVA的新特性,将关注点放在集合本身。
一 . 整体了解
有时需要对一组对象进行各种操作。
针对不同的应用场景,需要选择合适的数据结构(比如数组,链表,树),以及一些数据内容本身的特性
(比如 可重复,不可重复),因为很多内容是重复的,所以官方提供了这个集合框架
以下是官方给出的说明
The Collections Framework
集合框架
集合框架是用于表示和操作集合的统一体系结构,使它们能够独立于其表示的细节而被操纵。它减少了编程工作,同时提高了性能 它支持无关API之间的互操作性,减少设计和学习新API的工作量,并促进软件重用。该框架基于十多个集合接口。它包括这些接口和算法的实现来操纵它们。
java提供了两种类型的容器
- Collection 存储某种元素的集合
- map 存储键/值对
主要有以下几种
- Set 用于存储一组不重复的元素
- List 用于存储一组有序元素
- Stack 栈 存储后进先出的对象
- Queue 队列 用于存储先进先出的对象
- Priority Queue 用于存储按照优先级顺序处理的对象
一些通用的特性在接口中定义,实现在具体类中
一. interface Iterable<T> 这里只定义了一个接口,返回一个迭代器对象
package java.lang; import java.util.Iterator; public interface Iterable<T> { Iterator<T> iterator(); }
二 . interface Collection<E>
官方说明:
Collection 层次结构 中的根接口。Collection 表示一组对象,
这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。
一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:
它提供更具体的子接口(如 Set 和 List)实现。
package java.util; public interface Collection<E> extends Iterable<E> {
//返回元素个数 int size(); //是否为空 boolean isEmpty();
//是否包含某个元素
boolean contains(Object var1);
//返回一个迭代器对象 Iterator<E> iterator(); //返回此collection 的数组 Object[] toArray(); <T> T[] toArray(T[] var1); //增加 boolean add(E var1); //删除 boolean remove(Object var1); //是否包含另一个 collection的所有元素 boolean containsAll(Collection<?> var1); boolean addAll(Collection<? extends E> var1); boolean removeAll(Collection<?> var1); //仅保留此 collection 中那些也包含在指定 collection 的元素 boolean retainAll(Collection<?> var1); //清除 void clear(); boolean equals(Object var1); int hashCode(); }
三. AbstractCollection<E>
官方说明:
此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。
要实现一个不可修改的 collection,编程人员只需扩展此类,并提供 iterator 和 size 方法的实现。(iterator 方法返回的迭代器必须实现 hasNext 和 next。)
要实现可修改的 collection,编程人员必须另外重写此类的 add 方法(否则,会抛出 UnsupportedOperationException),iterator 方法返回的迭代器还必须另外实现其 remove 方法。
按照 Collection 接口规范中的建议,编程人员通常应提供一个 void (无参数)和 Collection 构造方法。
此类中每个非抽象方法的文档详细描述了其实现。如果要实现的 collection 允许更有效的实现,则可以重写这些方法中的每个方法。