【发布时间】:2018-07-02 20:00:09
【问题描述】:
我正在制作一个双端双端队列。我收到一个错误:Deque<String> d = new Deque<String>(); 错误是 Deque 不接受参数。
这是我的双端队列:
import com.sun.org.apache.xpath.internal.operations.String;
import java.util.Iterator;
public abstract class Deque implements DoubleEndedQueue<Object>,Iterator<Object> {
private static Node<Object> first;
private static Node<Object> last;
private static int size = 0;
public Deque() {
size = 0;
first = null;
last = null;
}
private static class Node<Object> {
Object item;
Node<Object> prec;
Node<Object> next;
}
DoubleEndedQueue<Object> d = new DoubleEndedQueue<Object>() {
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public int size() {
return size;
}
@Override
public void pushLeft(Object item) {
Node<Object> newNode = new Node<Object>();
newNode.item = item;
if (size == 0) {
first = last = newNode;
} else {
newNode.next = first;
first.prec = newNode;
}
first = newNode;
if (last == null) {
last = first;
}
size++;
}
@Override
public void pushRight(Object item) {
Node<Object> newNode = new Node<Object>();
newNode.item = item;
if (size == 0) {
last = first = newNode;
} else {
newNode.prec = last;
last.next = newNode;
}
last = newNode;
if (first == null) {
first = last;
}
++size;
}
@Override
public Object popLeft() {
Node<Object> newNode = new Node<Object>();
newNode = first;
first = first.next;
if (first == null) {
last = null;
} else {
first.prec = null;
}
size--;
return newNode.item;
}
@Override
public Object popRight() {
Node<Object> newNode = new Node<Object>();
newNode = last;
last = newNode.prec;
if (last == null) {
first = null;
} else {
last.next = null;
}
size--;
return newNode.item;
}
@Override
public Object changeLeft(int n, Object newItem) {
Node<Object> newNode = new Node<Object>();
newNode = first;
for (int i = 0; i < n; i++) {
newNode = newNode.next;
}
return newNode.item = newItem;
}
@Override
public Object changeRight(int n, Object newItem) {
Node<Object> newNode = new Node<Object>();
newNode = last;
for (int i = 0; i < n; i++) {
newNode = newNode.prec;
}
return newNode.item = newItem;
}
};
public Iterator<Object> iterator() {
return new Iterator<Object>() {
private Node<Object> node = first;
@Override
public boolean hasNext() {
return node != null;
}
@Override
public Object next() {
Object item = node.item;
node = node.next;
return item;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public interface Iterable<Object> {
Iterable<Object> iterator();
}
public static void main(String[] args) {
Deque<String> d = new Deque<String>();
d.pushLeft("im first");
d.pushLeft("im second");
d.pushRight("im third");
d.pushRight("im fourth");
d.pushLeft("im fifth");
d.pushRight("im sixth");
d.changeLeft(1, "well");
d.changeRight(2, "this");
d.changeLeft(1, "was");
d.changeRight(3, "fun");
d.popRight();
d.popLeft();
}
}
【问题讨论】:
-
嗯,它不带参数。你了解 Java 泛型是如何工作的吗?如果您希望一个类是通用的,那么在任何地方都使用
<Object>不是您的做法。 -
你还声明了 Deque 抽象,所以 new Deque() 不能很好地工作。
标签: java data-structures deque