我正在制作双端双端队列。我在以下位置遇到错误: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();
}
}
这里有问题:
Deque
是abstract
,这意味着您无法使用new
实例化它。 Deque
类中,您在new
上调用了DoubleEndedQueue
,但看起来这是一个接口。您无法在接口上呼叫new
。new DoubleEndedQueue
”内部的重写方法,并将其直接放置在Deque
类中,并摆脱摘要。希望这会为您指明正确的方向。
因为创建对象时使用的是泛型,而创建类时却没有。您需要提供-公共抽象类Deque实现DoubleEndedQueue,Iterator {}