繁体   English   中英

设置值链接列表节点Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM