设置值链表节点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;

我正在研究如何从未排序的链表中删除重复项,对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()
实际上就是在创建对该对象的引用:

  • 您向操作系统请求存储对象的空间
  • 操作系统为对象找到一个位置,并给您一个数字——内存地址
  • 该数字被分配给变量
  • 通过读取对象的字段,可以访问存储在给定变量地址处的数据

为什么不试着用一套呢?