0

这是我在数据结构中实现 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;
    }
}
4

1 回答 1

1

我对您的建议是阅读现有的 LinkedList 库源代码,您可以轻松找到它们。我建议您也阅读 ArrayList 的源代码,因为您将包装一个数组。最后看看 ArrayBlockingQueue 因为这是一个包装数组的队列。最后一个类最接近您想要的,但也是最复杂的,因为它是并发且线程安全的。

当你开始编写一个类时,我建议你从一些非常简单的东西开始,然后编译它。使用 IDE,它将显示代码是否会在您键入代码时编译并提出更正建议。

然后我会写一个非常简单的单元测试来测试你非常简单的代码。你可以用一种方法做到这一点。(有些人建议先写测试用例,但我觉得这很难,除非你以前写过这种类,在这种情况下你并不是真的先写单元测试,只是第一次为那个代码库写)

然后添加第二种或第三种方法并对其进行测试。

当它执行您不理解的操作时,请使用您的调试器单步执行代码以查看每一行的功能。


我会使用诸如 Netbeans、Eclipse 或 IntelliJ CE 之类的 IDE。我更喜欢 IntelliJ,但 Netbeans 可能是初学者的最佳选择。

  • 下载 IDE。
  • 开始一个新项目。
  • 创建一个类并将代码复制并粘贴到该类中。
  • 创建另一个使用该类的类。这是你的课。

顺便说一句,你是写这门课还是给你的,因为它有很多不寻常的编码选择。


代码注释

  • 它是一个 Queue,它包装了一个实现 Queue 的类,因此委派看起来很自然,但它似乎并没有这样做,这表明它不是标准的 LinkedList 和 Queue,这是令人困惑的LinkedListQueue
  • 它使用count未定义的字段而不是 LinkedList.size()。
  • dequeue 在一次效率更高时访问 LinkedList 两次(就像标准库一样)
  • 当 Iterator 自 Java 1.2 (1998) 起成为标准时,它支持 Enumeration 而不是 Iterator
  • 当 equals 为 false 时 compareTo 为 0,这是一个错误。
  • 它不支持内置的泛型。
  • compareTo 仅检查长度,因此带有“A”的队列和带有“Z”的队列是 compareTo == 0
  • 等于用途this.headthis.length哪些不是字段。
于 2012-08-04T08:40:20.280 回答