设置值链表节点Java
我正在研究如何从未排序的链表中删除重复项,对Java中的引用感到困惑:设置值链表节点Java,java,linked-list,Java,Linked List,我正在研究如何从未排序的链表中删除重复项,对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;
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()
实际上就是在创建对该对象的引用:
- 您向操作系统请求存储对象的空间
- 操作系统为对象找到一个位置,并给您一个数字——内存地址
- 该数字被分配给变量李>
- 通过读取对象的字段,可以访问存储在给定变量地址处的数据