Java QueueAsLinkedList实现
这是我在数据结构中的赋值程序,用于实现QueueAsArray。我希望有人能指导我解决这个问题,因为我没有很强的java编程背景 我希望有人能给我一些指导,告诉我如何在我的主程序中编译和使用这些代码Java QueueAsLinkedList实现,java,linked-list,queue,variable-assignment,Java,Linked List,Queue,Variable Assignment,这是我在数据结构中的赋值程序,用于实现QueueAsArray。我希望有人能指导我解决这个问题,因为我没有很强的java编程背景 我希望有人能给我一些指导,告诉我如何在我的主程序中编译和使用这些代码 public class QueueAsLinkedList extends AbstractContainer implements Queue { protected LinkedList list; public QueueAsLinkedList () { list
public class QueueAsLinkedList extends AbstractContainer implements Queue
{
protected LinkedList list;
public QueueAsLinkedList ()
{ list = new LinkedList (); }
public void purge ()
{
list.purge ();
count = 0;
}
public Object getHead ()
{
if (count == 0)
throw new ContainerEmptyException ();
return list.getFirst ();
}
public void enqueue (Object object)
{
list.append (object);
++count;
}
public Object dequeue ()
{
if (count == 0)
throw new ContainerEmptyException ();
Object result = list.getFirst ();
list.extract (result);
--count;
return result;
}
public Enumeration getEnumeration()
{
return new Enumeration()
{
protected LinkedList.Element position = list.getHead();
public boolean hasMoreElements()
{
return position != null;
}
public Object nextElement()
{
if (position == null)
throw new NoSuchElementException();
Object result = position.getDatum();
position = position.getNext();
return result;
}
};
}
protected int compareTo (Comparable object)
{
AbstractContainer arg = (AbstractContainer) object;
long diff = (long) getCount() - (long) arg.getCount();
if (diff < 0)
return -1;
else if (diff > 0)
return +1;
else
return 0;
}
public boolean equals(Object object) {
LinkedList list_object = (LinkedList)object;
if(list_object.length != this.length) {
return false;
}
Element ptr = this.head;
Element list_object_ptr = list_object.head;
for(int i = 0; i < this.length; i++) {
if(list_object_ptr.getDatum () != ptr.getDatum ()) {
return false;
}
ptr = ptr.getNext ();
list_object_ptr = list_object_ptr.getNext ();
}
return true;
}
}
公共类QueueAsLinkedList扩展AbstractContainer实现队列
{
受保护的链接列表;
public QueueAsLinkedList()
{list=newlinkedlist();}
公共无效清除()
{
list.purge();
计数=0;
}
公共对象getHead()
{
如果(计数=0)
抛出新的ContainerEmptyException();
return list.getFirst();
}
公共无效排队(对象)
{
list.append(对象);
++计数;
}
公共对象出列()
{
如果(计数=0)
抛出新的ContainerEmptyException();
对象结果=list.getFirst();
列表。摘录(结果);
--计数;
返回结果;
}
公共枚举getEnumeration()
{
返回新枚举()
{
受保护的LinkedList.Element position=list.getHead();
公共布尔值hasMoreElements()
{
返回位置!=null;
}
公共对象nextElement()
{
如果(位置==null)
抛出新的NoTouchElementException();
对象结果=位置。getDatum();
position=position.getNext();
返回结果;
}
};
}
受保护的整数比较对象(可比较对象)
{
AbstractContainer arg=(AbstractContainer)对象;
long diff=(long)getCount()-(long)arg.getCount();
如果(差异<0)
返回-1;
否则如果(差异>0)
返回+1;
其他的
返回0;
}
公共布尔等于(对象){
LinkedList_对象=(LinkedList)对象;
if(list_object.length!=此.length){
返回false;
}
元素ptr=这个头;
元素list\u object\u ptr=list\u object.head;
对于(inti=0;i
我的建议是阅读现有的LinkedList库源代码,您可以轻松找到这些源代码。我建议您也阅读ArrayList的源代码,因为您将包装一个数组。最后看看ArrayBlockingQueue,因为这是一个包装数组的队列。最后一个类最接近您想要的,但最复杂,因为它是并发和线程安全的
当您开始编写一个类时,我建议您从一些非常简单的东西开始,并将其编译。使用IDE,它将显示在您键入代码并建议更正时代码是否会编译
然后我将编写一个非常简单的单元测试来测试非常简单的代码。您只需使用一种方法即可做到这一点。(有些人建议先编写测试用例,但我发现这非常困难,除非您以前编写过此类类,在这种情况下,您并不是真正先编写单元测试,只是第一次编写代码库)
然后添加第二个或第三个方法,并对这些方法进行测试
当它执行您不理解的操作时,请使用调试器逐步检查代码,以查看每一行执行的操作
我会使用诸如Netbeans、Eclipse或intellijce之类的IDE。我更喜欢IntelliJ,但对于初学者来说,Netbeans可能是最好的
- 下载IDE李>
- 开始一个新项目
- 创建一个类并将代码复制粘贴到该类中
- 创建另一个使用该类的类。这是你们班
对守则的评论
- 这是一个队列,它包装了一个实现队列的类,因此委派看起来很自然,但它似乎没有这样做,这表明
和LinkedList
不是标准的LinkedList和Queue,这很容易混淆Queue
- 它使用未定义的字段
,而不是LinkedList.size()count
- 出列访问LinkedList两次,而一次访问效率更高(标准库就是这样)
- 当迭代器自Java1.2(1998)以来成为标准时,它支持枚举而不是迭代器
- 当equals为false时,compareTo为0,这是一个错误
- 它不支持内置的泛型
- compareTo只检查长度,因此带有“a”的队列和带有“Z”的队列的长度是compareTo==0
- equals使用非字段的
和this.head
this.length