Java 核心技术学习笔记— Java集合框架部分内容#yyds干货盘点#

Java 最初版本只提供了最初的几个 Java 集合框架个类:

  • Vector
  • Stack
  • Hashable
  • BitSet
  • Enumeration

其中 Enumeration 接口提供了一种用于访问任意容器中各个元素的抽象机制。

Java 集合类库将接口( interface )与实现(implementation)分离。

队列是如何分离的

队列涉及的几个操作:

  • 在队尾添加元素
  • 在队头删除元素
  • 查找队列中元素的个数

特点:先入先出

队列的接口:

public interface Queue<E> // a simplified form of the interface in the stardard library
{
    void add(E element);
    E remove();
    int size();
}

在数据结构课中,队列通常有两种实现方式:

  1. 使用循环数组;但这种方式的局限是队列的长度有限。
  2. 使用链表

代码表示如下:

public class CircularArrayQueue<E> implements Queue<E>  // not an actual library class
{
    private int head;
    private int tail;
    
    CircularArrayQueue(int capacity) {...}
    
    public void add(E element) {...}
    public E remove() {...}
    public int size() {...}
    private E[] elements;
}

public class LinkedListQueue<E> implements Queue<E>  // not an actual library class
{
    private Link head;
    private Link tail;
    
    LinkedListQueue() {...}
    public void add(E element) {...}
    public E remove() {...}
    public int size() {...}
}

注释:实际上,Java 类库没有名为 CirclularArrayQueue 和 LinkedListQueue 的类。这里只是以这些类作为示例来解释集合接口与实现在概念上的区分。

Queue 的使用

假设定义了上述的 CircularArrayQueueLinkedListQueue 之后,就可以直接使用:

Queue<Customer> expressLane = new CircularArrayQueue<>(100);
expressLane.add(new Customer("Harry")
Queue<Customer> expressLane = new LinkedListQueue<>();
expressLane.add(new Customer("Bug")

循环数组要比链表高效,因此多数人优先选择循环数组。

但是循环数组是一个有界数组,即容量有限。如果使用的对象数量没有上限,最好使用链表实现。

上一篇:丰田将与Uber联手开发无人驾驶技术


下一篇:Java集合框架图