java引用之间的异或操作
Posted
技术标签:
【中文标题】java引用之间的异或操作【英文标题】:xor operation between java references 【发布时间】:2011-06-17 03:10:00 【问题描述】:我想为 xor-linked list 编写 java 代码。有人可以建议我如何在引用之间执行异或操作吗?
【问题讨论】:
为什么?运行时有很多列表实现——你需要什么? 异或链表的目的似乎是为了相同的内存。如果你想这样做,你会使用一个 ArrayList 来节省更多的内存。 (尽管我怀疑你是否需要担心) 【参考方案1】:在 Java 中不可能在引用节点之间执行 XOR 操作。 XOR 是按位逻辑运算符。它只能用于对二进制数字/布尔值执行操作,我们不能将 java 中的内存地址转换为整数
【讨论】:
【参考方案2】:长话短说,你不能。
简单地说,如果 Java 允许您通过引用传递变量,那么 Java 语言不允许对这些引用进行算术运算。因此,您的异或操作将是不可能的。
此外,在阅读 Wikipedia 条目时,我理解这是对经典链表实现的内存优化,仅依靠指针算法来确定下一个/上一个节点。我认为它是一种非常高级的内存优化,在 Java 中似乎不如在 C(++) 等非托管内存语言中有用。
【讨论】:
在java中创建异或链表没有其他选择吗? 是的。使用常规的双向链表;例如由LinkedList
提供。【参考方案3】:
不,你不能。 Java 没有用于检索对象地址的内置函数。仍然可以使用sun.misc.Unsafe
完成,但您应该知道在使用该类时您在做什么。
【讨论】:
【参考方案4】:你可以……但我必须先说:不要这样做。
有一个类sun.misc.Unsafe
允许做很多不安全的事情。使用它,您可以获得对象的地址并使您成为异或链表。但再说一遍:不要这样做。至少存在以下问题:
最后:不要这样做。
如果您只想使用列表,请在数组内部实现它(使用索引而不是指针)。这是安全的,并且会起作用。然而,链表是非常低效的结构,在大多数情况下几乎无法使用。
【讨论】:
哇... +1 提到Unsafe
。我很容易通过代码示例将其翻倍(如果可能的话)。以上是关于java引用之间的异或操作的主要内容,如果未能解决你的问题,请参考以下文章