3. 基于自定义数组的普通队列实现

博客介绍了普通队列存在的问题,即队首弹出时后续元素需移动位置,复杂度高,在数据量大时问题突出,还提及后续会用循环队列解决该问题,同时提到了Queue队列接口。

普通队列有个致命的地方就是 每次当队首弹出的时候,后续的所有元素都需要移动位置,复杂度很高,当数据量大的时候很致命,后面有循环队列来解决该问题

Queue队列接口

package com.lonely.队列;

/**
 * @author ztkj-hzb
 * @Date 2019/6/18 15:21
 * @Description 队列 先进先出
 */
public interface Queue<T> {

    /**
     * 入队
     */
    void enqueue(T t);

    /**
     * 出队
     *
     * @return
     */
    T dequeue();

    /**
     * 获取队首的数据
     *
     * @return
     */
    T getFront();

    /**
     * 获取队列中的长度
     *
     * @return
     */
    int getSize();

    /**
     * 是否为空
     *
     * @return
     */
    boolean isEmpty();

    /**
     * 获取队列中容量
     *
     * @return
     */
    int getCapcity();
}

普通队列

package com.lonely.队列;

import com.lonely.数组.MyArray;

/**
 * @author ztkj-hzb
 * @Date 2019/6/18 15:27
 * @Description 基于数组实现的队列, 每次出队后,需要将后续的所有元素移动位置,数据量大的情况下很影响性能
 */
public class ArrayQueue<T> implements Queue<T> {

    /**
     * 基于二次封装数组实现
     */
    private MyArray<T> myArray;

    public ArrayQueue() {
        this(10);
    }

    public ArrayQueue(int capcity) {
        this.myArray = new MyArray<>(capcity);
    }

    /**
     * 入队
     */
    @Override
    public void enqueue(T t) {
        this.myArray.addLast(t);
    }

    /**
     * 出队
     *
     * @return
     */
    @Override
    public T dequeue() {
        return this.myArray.removeFirst();
    }


    /**
     * 获取队首数据
     *
     * @return
     */
    @Override
    public T getFront() {
        return this.myArray.get(0);
    }

    /**
     * 获取队列长度
     *
     * @return
     */
    @Override
    public int getSize() {
        return this.myArray.getSize();
    }

    /**
     * 判断队列长度是否为空
     *
     * @return
     */
    @Override
    public boolean isEmpty() {
        return this.myArray.isEmpty();
    }

    /**
     * 获取队列的实际容量
     *
     * @return
     */
    @Override
    public int getCapcity() {
        return this.myArray.getCapcity();
    }


    /**
     * 格式化输出
     *
     * @return
     */
    @Override
    public String toString() {
        StringBuilder message = new StringBuilder("ArrayQueue{");

        for (int i = 0; i < this.myArray.getSize(); i++) {
            if (i == this.myArray.getSize() - 1) {
                //最后一个
                message.append(this.myArray.get(i));
            } else {
                message.append(this.myArray.get(i)).append(",");
            }
        }

        message.append("}");
        return message.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值