[英]Setting Value Linked List Nodes Java
我一直在研究如何从未排序的链接列表中删除重复项,并对Java中的引用感到困惑:
public static void deleteDups (LinkedListNode n){
Hashtable table = new Hashtable();
LinkedListNode previous = null;
while(n!=null){
if(table.containsKey(n.data)){
previous.next = n.next;
} else {
table.put(n.data, true);
previous = n;
}
n = n.next;
}
}
当我们执行n = n.next
,为什么previous
的值也没有被修改,因为previous
指向n
?
变量n
实际上没有保存LinkedListNode
的实例。
变量n
包含一个数字。 例如,它可能包含数字0x04AF34ED
。
这个号码是一个地址 。 如果处理器在计算机的RAM中寻找该地址,它将找到与LinkedListNode
关联的数据。
变量previous
也包含一个数字。 在源代码的第10行,它恰好拥有与变量n
相同的数字,这意味着它们指向同一对象。 在源代码的第11行,为变量n
提供了一个新数字-对象n.next
的地址。 分配给previous
的数字不变。 它仍然保留旧LinkedListNode
的地址。
在Java中,每次创建新对象(例如List list = new ArrayList()
,实际上是在创建对该对象的引用:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.