Why should we use 2 constructors when implementing Linked List?

时间:2018-04-18 18:15:27

标签: java data-structures linked-list nodes default-constructor

Professor showed us the implementation of linked list and nodes in java. Node started with this:

private class Node{

  private T data;
  private Node next;

  private Node(T data){
    this(data,null)
  }

  private Node(T dataP, Node nextN){
   data = dataP;
   next= nextN;
  }

}

What is the reason for using two distinct constructors? Client can call the 2nd constructor with Node null, if he wants to. Professor said it wasn't to make it easier on the client, too. I know Java creates default constructor if you don't provide one, but is this really about making sure there are no errors in this case? If so, what would be the error to arise in a situation where we don't have default constructor?

2 个答案:

答案 0 :(得分:1)

不需要两个构造函数。它可能只是你的教授给出的一个例子,两个构造函数,以及其中一个使用另一个构造函数的例子。
在使用第二个构造函数的示例new Node(someKindOfVariable, null)中,使用第一个构造函数与new Node(someKindOfVariable)相同。所以没有必要拥有第一个构造函数。

答案 1 :(得分:1)

有时,在实例化对象时,为了方便和可读性,您希望拥有更多构造函数(重载)。即使private构造函数不打算被其他类调用,也可以由正在查看或维护该类的其他程序员再次查看或使用它。

在您的情况下,Node(data)Node(data,null)的简写,因为其他程序员可能不知道如何在未定义Node的情况下实例化单个next

拥有更多构造函数对非private类(publicprotecteddefault更有帮助,因为其他程序员可能会扩展或重用您的类及其构造函数。拥有额外的构造函数可以允许不同的实例化方式。