2017-08-24 58 views
0

我一直在尋找了如何從無序鏈表中刪除重複和我在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

+0

你爲什麼不嘗試使用Set? –

回答

1

變量n實際上並不包含LinkedListNode的實例。

變量n包含一個數字。例如,它可能包含數字0x04AF34ED

這個號碼是地址。如果處理器在計算機的RAM中查找該地址,它將找到與LinkedListNode相關的數據。

變量previous也包含一個數字。在源代碼的第10行,它恰好與變量n保持相同的數字,這意味着它們指向相同的對象。在來源的第11行,變量n被賦予一個新號碼 - 對象n.next的地址。分配給previous的編號不會更改。它仍然保存着舊的LinkedListNode的地址。

在Java中,每次創建新的對象,像List list = new ArrayList()你實際上創建引用該對象:

  • 你問的操作系統的空間來存儲對象。
  • 操作系統爲對象找到一個位置並給出一個數字 - 內存地址。
  • 該編號分配給變量。
  • 您可以通過讀取對象的字段來訪問存儲在變量地址處的數據。