概述
Java集合框架
(一)将集合的接口与实现分离
事实上,Java的集合类库也是将接口与实现分离的。这句话的意思就是:集合会定义接口,然后再实现接口。我们举个例子,看看对列Queue是如何接口与实现分离的。
队列接口指出可以在队列尾部添加元素,队列头部删除元素,并且可以查找队列元素的个数。那么,我们可以把队列接口用下面简单的形式表现出来:
public interface Queue<E>
{
public add(E element);
public E remove();
public int size();
}
这个接口并没有说明是如何实现的,队列通常有两种实现方式:一、循环数组,二、链表
假设队列的两种实现是如下代码:
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(){...}
}
public class LinkedListQueue<E> implements Queue<E>
{
private Link head;
private Link tail;
LinkedListQueue(){...}
public viod add(E element){...}
public E remove(){...}
public int size(){...}
}
其实我们不必知道队列使用的是那种实现,只有我们在构建集合对象时,使用具体的类才有意义。还有一点需要说明的是:我们可以使用接口类型存放集合的引用。
Queue<Customer> cus = new CircularArrayQueue<>(100);
//利用这种方式的好处,就是一旦我们需要使用其他实现方式,我们只需要修改调用的构造器即可
Queue<Customer> cus = new LinkedListQueue<>(100);
(二)Collection接口
在Java类库中,集合类的基本接口是Collection接口,这个接口有两个常见的方法:
public interface Collection<E>
{
...
boolean add(E element);
Iterator<E> iterator();
}
add方法用于向集合中添加元素,如果添加元素确实改变了集合,就返回true,否则false;
iterator方法用于返回一个实现了Iterator接口的对象,可以使用这个迭代器依次访问集合中的元素。
(三)迭代器
Iterator接口有4个方法:
public interface Iterator<E>
{
E next();
boolean hasNext();
void remove();
default void forEachRemaining(Cosumer<? super E> action);
}
通过循环,反复调用next方法,可以逐个访问集合中的每个元素。但是如果到达了集合末尾,next方法将抛出一个NoSuchElementException异常,因此在调用next方法之前需要调用hasNext方法进行判断。
Collection<Stirng> c = ...;
Iterator<String> it = c.iterator();
while(it.hasNext()){
String element = it.next();
do something with element
}
也可以使用for-each循环遍历集合元素:
for(String element : c){
do something with element
}
在Java8中,甚至不用写循环,可以调用forEachRemaining方法并提供一个lambda表达式,将对迭代器的每一个元素调用这个表达式,直到没有元素为止。
iterator.forEachRemaining(element->do something with element);
还有一个方法是remove方法,它将删除上次next方法返回的元素。更重要的是,next方法和remove方法具有相互依赖性,如果调用remove方法之前没有调用next方法,那么将会抛出一个IllegalStateException异常。比如要删除两个相邻的元素:
it.remove();
it.next();//这非常重要,否则会抛出异常
it.remove();
(四)泛型实用方法
由于Collection和Iterator都是泛型接口,所以可以编写操作任何集合类型的实用方法,例如contains方法,Java类库设计者认为,这些实用方法中的某些方法非常有用,应该将它们提供给类库的使用者,这样类库使用者就不必再重新构建这些实用方法了。
事实上,Collection接口声明了很多方法,所有的实现类都必须提供这些方法,可看API,如果每个使用者都要提供这么多方法,那就太麻烦了。所以Java类库又为我们提供了一个实现了某些实用方法的抽象类AbstractCollection,这些实用方法已经在这个抽象类中帮我们实现了,除非针对你的需求,你有更高效的处理方式,你可以重写该方法。
(五)集合框架中的接口
Java中集合主要有两个接口,Collection和Map,如下图:
下一节我们看看具体的集合。
最后
以上就是清爽八宝粥为你收集整理的CoreJava读书笔记--集合(一)--Java集合框架的全部内容,希望文章能够帮你解决CoreJava读书笔记--集合(一)--Java集合框架所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复