java集合

java集合

表述数据结构的熟悉以及特点

表示注释

在实现方法时,选择不同的数据结构会导致其实现风格以及性能纯在很大差异。java集合为我们提供内容许多可选择的数据结构。

java集合框架

​ java的最初版本只为我们提供了最为常见的数据结构提供了一组类:Vector、Stack、Hashtable、BitSet与Enumeration,其中Enumeration接口提供了一种用于访问任意容器中的各个元素的抽象机制。
​ 随着javaSE1.2的推出java推出一组完善的数据结构机制。设计人员希望java的数据结构类库可以简单易学而不是想C++的“标准模版库”(即STL)那样复杂,但有希望拥有STL推出的“泛型算法”所具有的优点。
​ 接下来将介绍java对于实现这些功能所做出的设计。

将集合的接口和实现分离

​ 我们通过具体的案例来分析java是怎么实现将集合的接口和实现分离的。

​ 首先来看一下队列,队列是一种数据结构。对于存放在队列中的数据开始遵循先进先出的规则,队接口指出可以在队列的尾部添加元素,可以在队列的头部删除元素。队列的接口最简单的形式如下

/**
* 一个最最简单的队列接口
*/
public interface Queue<E>{
    void add(E e);
    E remove();
    int size();
}

​ 这个接口并没有说队列是如何实现的。队列的实现通常有两种方法,一种是使用循环数组,另一种是使用链表。如下图:
在这里插入图片描述

每个实现都可以通过一个实现Queue接口表示。

循环数组:

public class CircularArrayQueue<E> implements Queue<E>{
    privata 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>{
    privata Link head;
    private Link tail;
    LinkedListQueue(){......}
    public void add (E element){.....}
    public E remove(){.....}
    public int size(){......}
}

实际上java并没有是叫做CircularArrayQueue和LinkedListQueue的类,这里只是为了说明java把接口和实现分离的设计作为一个列子。如果真的想要一个循环队列可以使用ArrayDeque类,如果是链表队列就直接使用LinkedLIst类,这个实现了Queue接口

​ 采用这种方式实现队列的好处主要是考虑后期维护时,如果想更改数据的存储结构会十分的方便。

列如刚开始使用

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

后来想使用链表时只需要

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

​ 选择什么样的数据结构,这要根据实际的项目决定。循环数组要比链表更加高效,因此大多数人选择循环数组,。然而这也会付出一定的代价,。循环数组是一个有限的集合,其容量是有限的,当添加的元素超出数组的容量时,就需要对数组进行扩容。频繁的改变容量大小会影响程序的性能,和稳定性。如果程序中要收集的元素没有上限,就最好选择链表来实现。

的,当添加的元素超出数组的容量时,就需要对数组进行扩容。频繁的改变容量大小会影响程序的性能,和稳定性。如果程序中要收集的元素没有上限,就最好选择链表来实现。

在java的API中会发现另一组以Abstract开头的类,有名字可以知道这是一个抽象类,列如,AbstractQueue。这些类是为类库实现这设计的,如果你想要实现自己的队列或者其他的数据结构,继承这些数据结构对应的抽象类比实现Queue接口要轻松很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值