【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我们知道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();
}
来源:oschina
链接:https://my.oschina.net/u/1540325/blog/736525