在一次采访中,我被要求用Java实现一些链表方法。我只有在C ++中实现链表的经验,并且有些事情让我很担心。阅读完this question并看到答案后,我仍有疑虑。
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;
而不是public Link nextLink;
这样的内容。如何在没有指针的情况下将值分配给Link?是因为在Java new
中返回一个实际的Link
对象吗?或者是否返回对它的引用?如果它返回对它的引用并不是一个问题,因为引用不同于实际的Link
对象?或者在Java中,任何对象的标识符实际上都是引用?
我知道这是一个意见问题,但为什么链接列表似乎更多地出现在C ++中呢?我猜这种语言没有内置支持所以很多关于链表的教程都是针对C ++的(即使重点是数据结构)。
答案 0 :(得分:1)
这是因为java用它们的引用操作对象。众所周知,java是按值传递的,但是对象的值是它们的地址。
答案 1 :(得分:0)
Java有自己的LinkedList类,如果这就是你要求的
点击此处:
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html
答案 2 :(得分:0)
在java中,对象由它们的引用操纵,引用类似于C ++中的指针,除了你不能像在C ++中那样直接操作地址。
在java中,当您使用Object时,使用它的引用,因此代码中的Link
只是对列表中下一个Node对象的引用。
答案 3 :(得分:0)
java中的对象引用和指针一样好,明显的区别在于你不能在这里做指针算术。 java中的MyClass myRef;
仅表示将指向某个对象的引用。
当你MyClass myRef = new MyClass();
创建一个对象并创建它并将其引用存储在myRef中时。你应该意识到内存中的对象与myRef中的引用之间的区别。它与我们在C / C ++中的工作方式非常相似。