2

首先,我最近几周一直在学习Java,所以我还没有太多经验。

这更像是一个理论问题。我想创建一个简单的列表。

所以首先我创建了一个类,在其中指定了一些方法。我希望它是通用的,所以我可以使用任何类型。

  public interface List<E> 

现在我需要实现它,所以我创建了:

    public class MyList<E> implements List<E>

现在,我需要两个属性:

 private E element;
 private MyList<E> next;

一个将保存我的通用类型,另一个将是到下一个元素的链接。首先,我不知道这是否是正确的写法。如果我把这个属性留在这个类中,它会正常工作吗?

其次,我一直在考虑是否最好创建另一个类,比如说一个Box包含这两个字段的类,从而在我的实现过程中使操作更容易。

可能是一个愚蠢的问题,但我正在努力学习并理解做到这一点的最佳方法。

谢谢你的时间。

4

3 回答 3

9

我猜你正在尝试实现一个单链表。现在回答你的问题,我认为创建一个Box你提到的类(通常称为Node)对你是有益的。因此,您的实现可能如下所示:

public class MyList<E> implements List<E> {
    private Node<E> head;

    private static class Node<E> {
        private E element;
        private Node<E> next;

        public Node(E element, Node<E> next) {
            this.element = element;
            this.next = next;
        }

        // ...
    }

    // ...
}

MyList将持有一个Node连接到其他Nodes 链的单个。如果您看一下,这就是实际java.util.LinkedList类的编写方式。

于 2012-09-30T21:22:28.487 回答
2

首先,列表具有保存元素的节点。例如:

public class Node<E> {
    private E element;
    private Node<E> next;
}

其次,您需要定义一个根节点,但从这里开始,您有两种实现方式:

  • 让节点实现List接口或者继承Node元素并让this实现接口
  • 创建一个实现您的接口并保存根元素的类(常用方法)

我将解释第二种方式,因为这是通常的方式。我们需要一个“主类”:

public class MyList<E> implements List<E> {
    private Node<E> root;
}

这个类现在应该实现你的方法并在根对象上工作——例如使用根节点的下一个指针遍历节点等等。此外,通常还会保存最后一个节点以便更快地添加,并且还会存储当前大小 - 因此,您需要在 List 实现中再添加两个变量。

但是,Node 类现在应该是私有内部类!

于 2012-09-30T21:27:17.337 回答
0

如果您只想使用您的列表,则java.util-package 中有标准实现:例如LinkedListArrayList。如果您想阅读有关不同类型列表及其实现方式的信息,维基百科总是一个很好的起点。

于 2012-09-30T21:20:04.650 回答