我是靠谱客的博主 清爽八宝粥,最近开发中收集的这篇文章主要介绍CoreJava读书笔记--集合(一)--Java集合框架,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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集合框架所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部