2011-01-28 30 views
9

我想爲xor-linked list編寫java代碼。有人可以建議我如何在參考之間執行異或操作嗎?xor在java引用之間的操作

+1

爲什麼?運行時有很多列表實現 - 你需要什麼? – 2011-01-28 09:40:16

+3

異或鏈表的目的似乎是對同一個內存。如果你想這樣做,你會使用一個ArrayList,這將節省更多的內存。 (雖然我懷疑你不需要擔心它) – 2011-01-28 09:44:27

回答

15

要說長東西短,你不能

只需多一點的話,如果Java允許您通過引用傳遞變量,這些基準運算不是由Java語言允許的。因此,你的異或操作將不可能。

而且,讀wikiedpia條目時,我已瞭解這是經典的鏈表實現的內存優化依託,以確定下一個/前一個節點,僅根據該指針運算。我認爲這是一種非常先進的內存優化,它在Java中看起來並不像在C(++)等非託管內存語言中那樣有用。

+0

在java中創建xor鏈表沒有其他選擇嗎? – Jagan 2011-01-28 09:36:06

7

你可以......但是我必須先說:不這樣做

有一類sun.misc.Unsafe允許做了很多不安全的事情。使用它你可以得到對象的地址,並使你的異或鏈表。但是,再次:不要做它。至少存在以下問題:

  • 由於JVM不理解您的列表,所以元素被GC吃掉。
  • 由於不安全是Oracle/Sun JRE的無證部分,它可能會在其他JRE中丟失,並且可能隨時消失。
  • 隨着指針的擺弄是一個容易出錯的操作,由於破壞內存結構,可能會導致虛擬機崩潰或出現奇怪的結果。

最後:不要做它


如果你只是想玩清單,在數組內實現它(使用索引而不是指針)。這是安全的,並會工作。然而,鏈表是相當低效的結構,大部分時間接近無法使用。

0

不,你不能。 Java沒有內置的用於檢索對象的地址。它仍然可以用sun.misc.Unsafe完成,但是你應該知道你在使用這個類時正在做什麼。