我想为xor-linked list编写 java 代码。有人可以建议我如何在引用之间执行异或操作吗?
问问题
1947 次
4 回答
15
长话短说,你不能。
再多说一点,如果 Java 允许您通过引用传递变量,那么 Java 语言不允许对这些引用进行算术运算。因此,您的异或操作将是不可能的。
此外,在阅读 Wikipedia 条目时,我理解这是对经典链表实现的内存优化,仅依靠该指针算法来确定下一个/上一个节点。我认为它是一种非常高级的内存优化,它在 Java 中似乎不如在非托管内存语言中有用,比如 C(++)。
于 2011-01-28T09:30:42.827 回答
10
你可以……但我必须先说:不要这样做。
有一个类sun.misc.Unsafe
允许做很多不安全的事情。使用它,您可以获得对象的地址并使您成为异或链表。但同样:不要这样做。至少存在以下问题:
- 由于 JVM 不理解您的列表,因此这些元素会被 GC 吃掉。
- 由于 Unsafe 是 Oracle/Sun JRE 中未记录的部分,它可能在其他 JRE 中丢失,并且可能随时消失。
- 由于摆弄指针是一个容易出错的操作,你可能会因为破坏内存结构而使你的虚拟机崩溃或得到奇怪的结果。
最后:不要这样做。
如果您只想使用列表,请在数组内部实现它(使用索引而不是指针)。这是安全的,并且会起作用。然而,链表是非常低效的结构,在大多数情况下几乎无法使用。
于 2011-01-28T11:05:13.737 回答
0
不,你不能。Java 没有用于检索对象地址的内置函数。仍然可以使用 来完成sun.misc.Unsafe
,但是您应该知道在使用该类时您在做什么。
于 2016-07-10T16:16:45.960 回答
0
Java 中不可能在引用节点之间执行 XOR 操作。XOR 是按位逻辑运算符。它只能用于对二进制数字/布尔值执行操作,我们不能将 java 中的内存地址转换为整数
于 2021-07-13T03:25:22.030 回答