Java 中的链表实现看起来不像 C++ 中的链表
Linkedlist implementation in Java doesnot seem like linkedlist as in C++
我正在浏览 LinkedList 并在 Java 中看到了实现。在我尝试和实现链表的那些日子里,它有指针和地址以及大量的艰苦工作。使用 Java 实现起来更容易,但我仍然需要做一些工作。我对链表的了解从下图中很清楚,其中 1,2,3,4 是链表的节点。
然而在java中,我遇到的代码让我想到了下图的LinkedList。
Java中链表的实现代码如下,
class LinkedListNode
{
LinkedListNode nextNode = null;//consider this member variable
int data;
public LinkedListNode(int data)
{
this.data = data;
}
void appendItemToLinkedList(int newData)
{
LinkedListNode end = new LinkedListNode(newData);
LinkedListNode temp = this;
while (temp.nextNode != null) { temp = temp.nextNode; }
temp.nextNode = end;
}
}
和
public static void main(String[] args)
{
LinkedListNode list = new LinkedListNode(10);
list.appendItemToLinkedList(20);
list.appendItemToLinkedList(30);
list.appendItemToLinkedList(40);
list.appendItemToLinkedList(50);
list.appendItemToLinkedList(60);
}
在图中,您可以清楚地看到节点对象位于其他节点对象的内部。它真的是一个链接的 list.Or 父容器,其中包含其他容器等等吗?
第二张图是认为一个列表 包含 另一个列表(如果 LinkedList
类型是原始类型,它就会这样)。
第一个图表是当你想到一个 LinkedList
引用 另一个时得出的。
因为 LinkedList
是引用类型,而不是原始类型,所以 nextNode
字段不会就地存储完整的 LinkedList
,而只是对一个的引用。因此,您的第一个图表是正确的,即使在 Java.
中也是如此
另请参阅:
这个问题,"What's the difference between primitive and reference types?"
Java 语言规范:Chapter 4.1, "Kinds of Types and Values"
链表在Java和C++中的实现实际上非常相似。唯一的区别是语言不同造成的自然差异。在两者中,您都将拥有一个用于 LinkedListNode 的实体 (class)。在这两个 class 中都有一个字段 next
,它在 Java 中是一个引用,或者在 C++ 中是一个指向下一个节点的指针。插入方法看起来也一样。所以总的来说,它只是相似:)
而适合这个设计的图当然是第一个了
Java 中的 LinkedList 是作为双 LikedList 实现的,因此它不是 C++ 中的原始类型。
仅供参考 - 来自 Stock(Doctor Deprecator)在 2016 年 JavaOne 的演讲中,java 计划出于特殊原因放弃对 LinkedLists、Vectors 和其他一些数据结构的支持。因此可能存在混淆和技术差异。
Linked list in C++ above
主要区别在于 JAVA,头部不仅仅是指向第一个元素的指针(无数据)。甚至 head 都有数据和指向第二个元素的指针(仅在列表为空的情况下除外)。简而言之,java 链表中的每个元素都有 2 个指针和数据,除了 head 有一个指向下一个元素及其数据的指针。不过我不确定最后一个元素。
我正在浏览 LinkedList 并在 Java 中看到了实现。在我尝试和实现链表的那些日子里,它有指针和地址以及大量的艰苦工作。使用 Java 实现起来更容易,但我仍然需要做一些工作。我对链表的了解从下图中很清楚,其中 1,2,3,4 是链表的节点。
然而在java中,我遇到的代码让我想到了下图的LinkedList。
Java中链表的实现代码如下,
class LinkedListNode
{
LinkedListNode nextNode = null;//consider this member variable
int data;
public LinkedListNode(int data)
{
this.data = data;
}
void appendItemToLinkedList(int newData)
{
LinkedListNode end = new LinkedListNode(newData);
LinkedListNode temp = this;
while (temp.nextNode != null) { temp = temp.nextNode; }
temp.nextNode = end;
}
}
和
public static void main(String[] args)
{
LinkedListNode list = new LinkedListNode(10);
list.appendItemToLinkedList(20);
list.appendItemToLinkedList(30);
list.appendItemToLinkedList(40);
list.appendItemToLinkedList(50);
list.appendItemToLinkedList(60);
}
在图中,您可以清楚地看到节点对象位于其他节点对象的内部。它真的是一个链接的 list.Or 父容器,其中包含其他容器等等吗?
第二张图是认为一个列表 包含 另一个列表(如果 LinkedList
类型是原始类型,它就会这样)。
第一个图表是当你想到一个 LinkedList
引用 另一个时得出的。
因为 LinkedList
是引用类型,而不是原始类型,所以 nextNode
字段不会就地存储完整的 LinkedList
,而只是对一个的引用。因此,您的第一个图表是正确的,即使在 Java.
另请参阅:
这个问题,"What's the difference between primitive and reference types?"
Java 语言规范:Chapter 4.1, "Kinds of Types and Values"
链表在Java和C++中的实现实际上非常相似。唯一的区别是语言不同造成的自然差异。在两者中,您都将拥有一个用于 LinkedListNode 的实体 (class)。在这两个 class 中都有一个字段 next
,它在 Java 中是一个引用,或者在 C++ 中是一个指向下一个节点的指针。插入方法看起来也一样。所以总的来说,它只是相似:)
而适合这个设计的图当然是第一个了
Java 中的 LinkedList 是作为双 LikedList 实现的,因此它不是 C++ 中的原始类型。 仅供参考 - 来自 Stock(Doctor Deprecator)在 2016 年 JavaOne 的演讲中,java 计划出于特殊原因放弃对 LinkedLists、Vectors 和其他一些数据结构的支持。因此可能存在混淆和技术差异。
主要区别在于 JAVA,头部不仅仅是指向第一个元素的指针(无数据)。甚至 head 都有数据和指向第二个元素的指针(仅在列表为空的情况下除外)。简而言之,java 链表中的每个元素都有 2 个指针和数据,除了 head 有一个指向下一个元素及其数据的指针。不过我不确定最后一个元素。