链表的Java实现

链表的Java实现,java,c++,data-structures,linked-list,Java,C++,Data Structures,Linked List,在一次采访中,我被要求用Java实现一些链表方法。我只在C++中实现了链表,而且有些事情与我有关。在阅读并看到答案后,我仍然有顾虑 class Link { public int data1; public double data2; public Link nextLink; //Link constructor public Link(int d1, double d2) { data1 = d1; data2 = d

在一次采访中,我被要求用Java实现一些链表方法。我只在C++中实现了链表,而且有些事情与我有关。在阅读并看到答案后,我仍然有顾虑

class Link {
    public int data1;
    public double data2;
    public Link nextLink;

    //Link constructor
    public Link(int d1, double d2) {
        data1 = d1;
        data2 = d2;
    }

    //Print Link data
    public void printLink() {
        System.out.print("{" + data1 + ", " + data2 + "} ");
    }
}
我的第一个问题是Java没有指针。我习惯于看到像
Node*nextNode
而不是
公共链接nextLink。如何在没有指针的情况下为链接分配值?是因为在Java中,new
返回了一个实际的
链接
对象吗?还是返回对它的引用?如果它返回一个对它的引用,这不是一个问题,因为引用不同于实际的
链接
对象?或者在Java中,任何对象的标识符实际上是引用吗


我知道这是一个观点,但是为什么链接列表似乎更多地出现在C++中?我猜语言没有内置的支持,所以很多关于链表的教程都面向C++(java语言)(即使关注于数据结构)。众所周知,java是按值传递的,但是对象的值是它们的地址。

java有自己的LinkedList类,如果您需要的话

请点击此处:


在Java中,对象是由引用操作的,引用与C++中的指针类似,只是不能像C++ java那样直接操作地址。p>
在java中,当您使用一个对象时,您使用它的引用,因此代码中的
链接
只是对列表中下一个节点对象的引用。

java中的对象引用与指针一样好,明显的区别是您不能在这里进行指针运算<代码>MyClass myRef只是指指向某个对象的引用。
当您执行
MyClass myRef=new MyClass()时创建一个对象并将其引用存储在myRef中。您应该认识到内存中的对象和myRef中的引用之间的区别。这与我们在C/C++中所做的几乎相同。

在Java中,任何对象的标识符实际上都是一个引用?我想这就是解决办法。是的,你的长文最后一句。在Java中,任何对象的标识符都是引用。Java对象引用实际上是指针,具有查找对象所需的值。地址您知道
Java
中的对象引用是指针,或者为什么访问空引用时会出现
NullPointerException
:-)Java中的所有对象类型都是引用类型。这些引用通常是用指针实现的,但它们不一定是指针。这是否能澄清问题?也可以回想一下标准库容器。不,看起来根本不是问题。所以在C++中,如果你刚才有代码>节点NEXNECTONE;
而不是
Node*nextNode
因为传递的是副本,而不是指针,所以一切都会变得效率低得多。关于这一点:有办法解决吗?在哪里我可以做像foo(bar a){a=new bar()}这样的事情,并且a也在bar的范围之外被更改?因为根本无法做到这一点似乎是一种巨大的痛苦,我觉得一定有办法做到this@Celeritas我不太记得C++中的情况,但是我想你的答案是:@ USER 2520938。你的意思是:“A在酒吧之外也改变了”?你是说
foo
?@Celeritas要想找到解决没有指针的Java的方法,最好的办法就是看看你最喜欢的Java版本:完整参考系列。我的是第八版,而这里是赫伯特·席尔德第九版的链接:。第八版的第59页和第113页将C/C++指针与Java引用进行了比较(与声明分配给在该对象上调用Java new的结果的Java实例不同)。