首先,我过去几周一直在研究Java,所以我的经验还不多。
这更像是一个理论问题。 我想创建一个简单的列表。
所以首先我创建了一个我指定了一些方法的类。我希望它是通用的,所以我可以使用任何类型。
public interface List<E>
现在我需要实现它,所以我创建了:
public class MyList<E> implements List<E>
现在,我需要两个属性:
private E element;
private MyList<E> next;
一个将保留我的泛型类型,另一个将是下一个元素的链接。 首先,我不知道这是否是正确的写作方式。如果我把这个属性留在这个类中,它会正常工作吗?
其次,我一直在考虑创建另一个类是否更好,比如一个Box
类,它将包含这两个字段,从而使我在实现过程中更容易操作。
可能是一个愚蠢的问题,但我正在努力学习并了解实现这一目标的最佳方法。
感谢您的时间。
答案 0 :(得分: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
链连接的Node
。如果您take a look,这就是实际的java.util.LinkedList
类的编写方式。
答案 1 :(得分:2)
首先,列表包含保存元素的节点。例如:
public class Node<E> {
private E element;
private Node<E> next;
}
其次,您需要定义一个根节点,但是从中可以有两种方法来实现它:
我将解释第二种方式,因为这是通常的方式。 我们需要一个“主要阶级”:
public class MyList<E> implements List<E> {
private Node<E> root;
}
此类现在应该实现您的方法并处理根对象 - 例如使用根节点的下一个指针遍历节点,依此类推。 此外,通常也保存最后一个节点以便更快地添加,并且还存储当前大小 - 因此,在List实现中还需要两个变量。
但是,Node类现在应该是一个私有的内部类!
答案 2 :(得分:0)
如果您只想使用列表,则java.util
- 包中有标准实现:LinkedList和ArrayList。如果您想阅读有关不同类型的列表及其实现方式的内容,Wikipedia始终是一个很好的起点。