我想编写一个通用类,它是具有基本推送和弹出操作的先进先出队列,这里是类:
class queue<E>
{
protected final class elem
{
public E val;
public elem next=null;
public elem(){}
public elem(E v)
{
val=v;
}
}
protected elem head=null,tail=null;
public queue()
{
}
public queue(E v)
{
head=new elem(v);
}
public void push(E v)
{
if(head==null)
head=tail=new elem(v);
else if(head==tail)
{
tail=new elem(v);
head.next=tail;
}
else
{
elem t=new elem(v);
tail.next=t;
tail=t;
t=null;
}
}
public final E peek()
{
return ((tail!=null)?tail.val:null);
}
public E pop()
{
if(head==null)
return null;
E i=head.val;
if(head!=tail)
head=head.next;
else
head=tail=null;
return i;
}
}
问题出在这里的 elem 构造函数中:
public elem(E v)
{
val=v;
}
我不想将 v 分配给 val 但我想克隆它(浅拷贝)。
这是我尝试过的事情:
1-克隆方法:因为它在 Object 类中受到保护,所以我无法从 E 变量访问它。
2- queue<E extends Cloneable>
: 没有解决问题,实际上 Cloneable 是一个空接口,它没有添加任何方法。
3-使用优先队列:这可能比自己编写队列类更容易,但我不想要优先级,只想要 Fifo 结构。
4-实现队列接口:其中你必须实现许多我不需要的方法,而且我仍然需要自己克隆。
那么,接下来要尝试什么?