# Inspired from ArrayQueue Exercise class

**URL:** <https://forum.codewithmosh.com/t/inspired-from-arrayqueue-exercise-class/18583>\
**Category:** Java\
**Created:** [March 7, 2023, 5:26am UTC](https://forum.codewithmosh.com/t/inspired-from-arrayqueue-exercise-class/18583 "2023-03-07T05:26:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![ScorpionKing21](https://avatars.discourse-cdn.com/v4/letter/s/278dde/32.png) [@ScorpionKing21](https://forum.codewithmosh.com/u/ScorpionKing21)\
**Post date:** [March 7, 2023, 5:26am UTC](https://forum.codewithmosh.com/t/inspired-from-arrayqueue-exercise-class/18583/1 "2023-03-07T05:26:53Z")

</div>

Hey guys,

Inspired from ArrayQueue class I extended Mosh’s solution and created this dynamic and all data Types queue that will work efficiently by using circular array.

```auto
@SuppressWarnings("unchecked")
public class ArrayQueue<T> {
    private int front = 0;
    private int rear = 0;
    private int size = 1;
    private int count = 0;
    private T[] queue = (T[]) new Object[size];

    public void enqueue(T item) {
        manageSize();
        queue[rear] = item;
        rear = (rear + 1) % queue.length;
        count++;
    }

    public void manageSize() {
        int currentElement = 0;
        if(isFull()){
            size*=2;

            var temp = (T[]) new Object[size];
            for(int i = front; i < queue.length; i++){
                temp[currentElement++] = queue[i];
            }
            for(int i = 0; i < front; i++) {
                temp[currentElement++] = queue[i];
            }
            front = 0;
            rear = currentElement;
            queue = temp;
        }
    }

    public T dequeue() {
        if(!isEmpty()) {
            var element = queue[front];
            queue[front] = null;
            front = (front+1) % queue.length;
            count--;
            return element;
        }
        return null;
    }

    public T peek() {
        return queue[front];
    }

    public boolean isEmpty() {
        return count == 0;
    }

    public boolean isFull() {
        return count == size;
    }

    @Override
    public String toString() {
        return Arrays.toString(queue);
    }
}

```
