第13章 集合
13.1 集合接口
1、将集合的接口与实现分离–队列
队列接口:指出在队列尾部添加元素,头部删除元素,可查找队列中元素个数。
一个队列接口的最小形式:
interface Queue<E> {
void add(E element);
E remove();
int size();
}
接口不会说明队列是如何实现的。但队列通常有两种实现方式:
1、循环数组:比链表高效,但容量有限
2、链表:对象数量没有上限时最好使用
//数组
//java库中没有这个类 只是作为示例
abstract class CircularArrayQueue<E> implements Queue<E> {
CircularArrayQueue(int capacity){}
public void add(E element){}
public E remove(){}
public int size(){}
private E[] elements;
private int head;
private int tail;
}
//链表
//java库中没有这个类 只是作为示例
abstract class LinkedListQueue<E> implements Queue<E> {
public void add(E element){}
public E remove(){}
public int size(){}
private Link head;
private Link tail;
}
因为是接口,队列的实现方式可以便捷的修改:
//数组实现
Queue<Customer> expressLane = new CircularArrayQueue<Customer>(100);
expressLane.add(new Customer("Harry"));
//修改为链表实现
Queue<Customer> expressLane = new LinkedListQueue<Customer>(100);
expressLane.add(new Customer("Harry"))
2、Java类库中的集合接口和迭代器接口
(1)Cellection接口
集合类的基本接口是Collection接口。该接口有两个基本方法,添加和访问元素
public interface Collection<E>{
boolean add(E element);//1、添加
Iterator<E> iterator();//2、访问
}
- add方法:返回true或false,如果添加元素确实改变了集合就是true,如果没变就是false。集合中不允许有重复的对象
- iterator方法:返回一个实现了Iterator接口的对象。可使用这个迭代器对象依次访问集合中的元素。
- 迭代器
- 删除元素
- 泛型实用方法
迭代器
public interface Iterator<E> {
E next();
boolean hasNext();
void remove();
}
1)通过反复调用next方法,逐个访问集合中的每个元素。但是next如果到集合的末尾会抛出错误,所以调用next方法之前要调用hasNext方法,返回true或者false。
Collection<String> c=..;
Iterator<String> iter = c.iterator();
//1一种老旧的循环方式
while(iter.hasNext()) {
String element = iter.next();
...
}
//2一种优雅的循环方式
for(String element : c) {
...
}