Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java QueueAsLinkedList实现_Java_Linked List_Queue_Variable Assignment - Fatal编程技术网

Java QueueAsLinkedList实现

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

这是我在数据结构中的赋值程序,用于实现QueueAsArray。我希望有人能指导我解决这个问题,因为我没有很强的java编程背景

我希望有人能给我一些指导,告诉我如何在我的主程序中编译和使用这些代码

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
    Queue
    不是标准的LinkedList和Queue,这很容易混淆
  • 它使用未定义的字段
    count
    ,而不是LinkedList.size()
  • 出列访问LinkedList两次,而一次访问效率更高(标准库就是这样)
  • 当迭代器自Java1.2(1998)以来成为标准时,它支持枚举而不是迭代器
  • 当equals为false时,compareTo为0,这是一个错误
  • 它不支持内置的泛型
  • compareTo只检查长度,因此带有“a”的队列和带有“Z”的队列的长度是compareTo==0
  • equals使用非字段的
    this.head
    this.length

这可能会有所帮助:在进行自己的比较时,请注意,对于繁琐的if(x0){return 1}等,有一些实用方法。请改用java.lang.Double.compare(Double,Double)。。看,有一本书,我要在那里引用代码。是的,有些代码实际上是不寻常的。你能在这件事上指导我吗?我怀疑你使用了不止一本书,因为代码是用不止一种风格编写的添加了关于如何再次启动此计划的反馈和我的建议。