节一、
将集合的接口与实现分离。与常见的数据结构类库一样,java集合类库也将接口与实现分离。先看熟悉的队列是如何分离的:队列通常有两种实现模式:使用循环数组,或使用链表。同一个接口,使用不同的子类就完成了不同的实现,从而达到不同的目的。
1、集合类的基本接口是Collection接口。使用add(E element)添加,get(int i)获取或者使用迭代器。
Collection接口扩展了Iterator接口。
Iterator接口的子类或者实现者,可以使用iterator()方法遍历集合中的元素。主要使用的就是next()、hasNext()方法,在遍历集合时,认为java迭代器位于两个元素之间,当调用next()时,迭代器越过元素并返回刚刚越过的元素的引用。因此,在调用remove()删除两个相邻的元素时,不能连着使用两个remove():
Like: remove();remove(); 应该使用remove();next();remove();
2、与Collection接口一样是集合的基本接口的还有一个接口:Map
Map是映射接口,因为集合里存的键/值对。使用put(K key,V value)方法放值,get(K key)获取。
List接口是一个有序的接口,可以使用迭代器顺序访问,也可以使用get(int i)随机访问。
Set接口是Collection接口的更严格定义。二者相同,只是前者更严谨。此接口不允许add()重复的元素。
3、具体的集合。
4、链表。很多使用数组和动态ArrayList类的事例证实使用他们的方便,但也有缺陷:想从数组中间位置添加或者删除一个元素是非常麻烦的事情,因为面临着相邻元素的移动问题。所以链表得存在就很有意义。链表将每个对象的引用存在独立的节点中,每个节点还存放着序列中下一个节点的引用,在Java程序设计语言中,链表实际上是双向链接的-每个结点还存放着指向前驱节点的引用。