问题
I want to write java code for xor-linked list . Can somebody suggest me how to perform xor operation between references?
回答1:
To say long things short, you can't.
With just a little more words, if Java allows you to pass variables by references, arithmetic on these reference is not permitted by the Java language. Hence, your xor operations won't be possible.
Moreover, when reading the Wikipedia entry, I understand it's a memory optimization of classical linked list implementation relying, for determining next/previous node, solely upon that pointer arithmetic. I consider it a kind of very advanced memory optimization, that doesn't seem as useful in Java as it can be in unmanaged memory languages like, say, C(++).
回答2:
You can... but I must say first: DO NOT DO IT.
There's a class sun.misc.Unsafe
allowing doing a lot of unsafe things. Using it you can get the address of objects and make you xor-linked list. But again: DO NOT DO IT. There are at least the following problems:
- As JVM do not understand your list, the elements get eaten by the GC.
- As Unsafe is a undocumented part of Oracle/Sun JRE, it may be missing in other JREs and it may disappear anytime.
- As fiddling with pointers is an error-prone operation, you may crash your VM or get strange result due to destroying memory structures.
And finally: DO NOT DO IT.
If you just want to play with the list, implement it inside of an array (use indexes instead of pointers). This is safe and will work. However, linked lists are quite inefficient structures, close to unusable most of the time.
回答3:
No you can't. Java doesn't have a built-in for retrieving the addresses of objects. It can be still done with sun.misc.Unsafe
, but you should know what you're doing when using that class.
来源:https://stackoverflow.com/questions/4826626/xor-operation-between-java-references