簡體   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