首页 > 解决方案 > Java中链表的以下两种实现是否相同?

问题描述

实施1->


public class Node<T> {
    
    T data;
    Node<T> next; // next should point to a node which contains data of type T
    
    Node(T data){
        this.data = data;
        this.next = null;
    }
}

实施 2 ->


public class Node<T> {
    
    T data;
    Node<T> next; // next should point to a node which contains data of type T
    
    Node(T data){
        this.data = data;
    }
}

由于在JAVA中引用默认为null,那么以上两种实现方式相同吗?我以前在 C++ 中实现过链表,对 JAVA 实现感到困惑

标签: javalinked-list

解决方案


两种实现是平等的。在您的案例中,创建新对象的阶段包括几个阶段(简化):

  1. 在字段上设置默认值data, next,因为它们是对 Object 类实例的引用,那么它们将是null
  2. 执行构造函数时,在第一个实现中在字段中设置 null 值是没有意义的,next因为它已经在第一阶段被 Java 设置为 null。还有其他可能的阶段,例如,当您从另一个类继承时,在这种情况下,将在当前类的构造函数之前调用父类构造函数。查看文档或文章了解更多详细信息(例如 - https://farenda.com/java/java-initialization-order/)。

推荐阅读