java学习之路记录
参考书籍 java核心卷一
集合框架总结
只是关于结构 和迭代器的总结
集合框架类库里的结构
在java提供的类库里,关于集合的其实分三种类型,
1 各种接口,例如Collection等。定义接口目的是将接口与实现分离。比如队列的实现可以用两种方式,循环数组,链表。
public class CircularArrayQueue<E> implements Queue<e>{..}
public class LinkedListQueue<E> implements Queue<e>{..}
//两种实现都可以继承接口Queue
2 各种抽象类,例如 AbstractQueue等,这些集合的抽象类是为了类库的实现者而设计的。什么意思呢?就是如果你想要自己去实现队列类,会发现扩展AbstractQueue类 比Queue接口容易的多。
3 各种具体类,这些类已经实现了很多方法,我们可以参考api直接调用。
具体的继承关系请参考核心卷一 9.1
迭代器
区分 Iterator 接口 和 Iterable接口
现在先说下Iterator接口
很多集合类都含有iterator()方法,调用这个方法就会返回一个实现了Iterator()接口的对象,利用这个对象就可以对集合进行遍历了。
public interface Iterator<E>{
E next();
boolean hasNext();
void remove();
..
}
需要注意的是:remove() 跟 next()方法的调用是相互依赖的,什么意思?
remove()方法每次删除的元素是上次调用next()方法返回的元素。
例子:
//删除两个相邻的元素
it.remove();
it.remove(); //错误
相反的,必须要先调用next()返回要删除的元素
it.remove();
it.next();
it.remove();//OK
接着说一下Iterable接口
public interface Iterable<E>{
Iterator<E> iterator();// 抽象方法。
}
因为这个接口含有iterator()方法,这个方法可以返回一个实现了Iterator()接口的对象。这个对象可以用for each 进行循环遍历。
所有只要实现了Iterable<E>
接口的对象就可以用for each。
重点是 collectin接口实现了Iterable<E>
接口。因此,标准库中的任何集合都可以使用for each。
下篇内容是 常见集合类的具体介绍 见集合框架(二)