\$\begingroup\$
\$\endgroup\$
This is my Queue implementation in Java. Would appreciate a review of the code.
import java.util.Iterator;
public class Queue<T>implements Iterable<T> {
private Node first, last;
private int size;
@Override
public QueueIterator iterator() {
return new QueueIterator();
}
private class QueueIterator implements Iterator<T>{
private Node current = first;
public boolean hasNext(){
return current != null;
}
public T next(){
T item = current.data;
current = current.next;
return item;
}
}
private class Node{
Node(T data){
this.data = data;
this.next = null;
}
T data;
Node next;
}
public Queue(){
first = last = null;
size = 0;
}
public void enqueue(T item){
Node p = new Node(item);
if(first == null){
first = last = p;
size++;
return;
}
last.next = p;
last = p;
size++;
}
public T dequeue(){
Node p = first;
try{
first = first.next;
size--;
}catch(Exception e){
System.out.println("Dequeing an empty queue :" + e);
}
return p.data;
}
public boolean isEmpty(){
return last == null;
}
}
asked Dec 22, 2015 at 21:10
1 Answer 1
\$\begingroup\$
\$\endgroup\$
Bug
dequeue
doesn't setlast
tonull
when the queue becomes empty. On the other hand,isEmpty
relies onlast
beingnull
.enqueue should be streamlined to
if (first == null) { first = p; } else { last->next = p; } last = p; size++;
to clearly state common vs different actions.
answered Dec 22, 2015 at 21:37
lang-java