集合 (1)
1. java集合框架
类库规模小且易于学习,不想C++那么复杂,却具有泛型算法的优点
1.1 将集合的接口与实现分离
队列:可以在队尾添加元素,可以在队头添加元素。可以查找队列元素的个数
队列// 队列接口的简单形式
public interface Queue<E>{
void add(E element);
E remove();
int size();
}
队列两种循环方式一种是循环数组;另一种是使用链表
每一个具体的实现都可以通过实现Queue接口的类来显示
// 这就是典型的接口与实现方法相分离
public class CircularArrayQueue<E> implements Queue<E>{
private int head;
private int tail;
CircularArrayQueue(int capacity) { ... }
public void add(E element) { . . . }
public E remove()
public int size() { . . . }
private E[] elements;
}
1.2 collection 接口
java类库中,集合的基本接口是Collection接口。这个接口有两个基本方法
public interface Collection<E>{
boolean add(E element);
Interator<E> iterator();
// ....
}
1.3 迭代器
Interator 接口包含四个方法
public interface Interator<E>{
E next();
boolean hasNext();
void remove();
default void forEachRemaining(Consumer <? super E> action);
}
// 通过反复调用next()方法可以逐个访问集合的每一个元素
Collection <string> = ....;
Interator<string> iter = c.interator();
while(iter.hasNext()){
String element = iter.next();
do someting with element;
}
// 用foreach循环可以更简单的表示同样的操作
// 第三种循环通过interator里面的forEachRemaining方法提供的一个表达式。他将对表达式的每一个元素调用lambda表达式
iterator.forEachRemaining(element -> do something with element);
interator 方法将会删除上次调用next方法返回的元素
如何删除第一个元素?
图2Interator<string> iter = c.interator();
iter.next();
iter.remove();
1.4 泛型实用方法
由于Collection和Interator都是泛型接口,可以编写操作任何集合类型的方法
public static <E> bollean contains(Collection<E> c,Object obj)
{
for (E element:c)
if(element.equals(obj))
return true;
return false;
}
1.5 集合框架中的接口
集合中的框架接口图
图三