引言:数据结构——队列
ArrayQueue
实现队列同样有两种方式,这里我们使用Array来实现
用户不需要知道底层的实现方式,所以我们先写一个Queue的接口吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public interface Queue<E> { int getSize(); boolean isEmpty();
void enqueue(E e);
E dequeue();
E getFront(); }
|
然后我们想一想,我们需要什么方法?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| import array.Array;
import java.util.StringJoiner;
public class ArrayQueue<E> implements Queue{ Array<E> array;
public ArrayQueue(int capacity) { this.array = new Array<>(capacity); }
public ArrayQueue() { array = new Array<>(); }
@Override public int getSize() { return array.getSize(); }
@Override public boolean isEmpty() { return array.isEmpty(); }
@Override public void enqueue(Object o) { array.addLast((E)o); }
@Override public E dequeue() { return array.removeFirst(); }
@Override public E getFront() { return array.get(0); }
public int getCapacity(){ return array.getCapacity(); }
@Override public String toString() { StringJoiner sj = new StringJoiner(",","Queue: front [","] tail"); for(int i =0;i<array.getSize();i++){ sj.add(array.get(i)+""); } return sj.toString(); } }
|
复杂度分析
1 2 3 4 5 6 7
| 方法名 | 时间复杂度 | ------------------------------------------------- enqueue(E e) | O(1) | (均摊复杂度) dequeue() | O(n) | front() | O(1) | getSize() | O(1) | isEmpty() | O(1) |
|
这里我们可以注意到,在使用Array来实现队列,它的出队时间复杂度需要O(n)
,在数据量很大的情况下,出队一次就需要浪费我们很长时间
那么我们怎么解决这个问题呢?
使用循环队列
参考资料
参考资料:
来自慕课liuyubobobo的教程