Я хочу написать код Java для списка, связанного с xor. Может ли кто-нибудь предложить мне, как выполнить операцию xor между ссылками?
операция xor между ссылками java
Ответы (4)
Короче говоря, вы не можете.
Еще немного слов: если Java позволяет передавать переменные по ссылкам, арифметические операции с этими ссылками не разрешены языком Java. Следовательно, ваши операции xor будут невозможны.
Более того, читая запись в Википедии, я понимаю, что это оптимизация памяти классической реализации связанного списка, основанная для определения следующего/предыдущего узла исключительно на этой арифметике указателя. Я считаю это своего рода очень продвинутой оптимизацией памяти, которая не кажется такой полезной в Java, как может быть в языках с неуправляемой памятью, таких как, скажем, C (++).
LinkedList
.
- person Stephen C; 28.01.2011
Вы можете... но сначала я должен сказать: НЕ ДЕЛАЙТЕ ЭТОГО.
Есть класс sun.misc.Unsafe
, позволяющий делать много небезопасных вещей. С его помощью вы можете получить адрес объектов и сделать список xor-связанным. Но опять же: НЕ ДЕЛАЙТЕ ЭТОГО. Есть как минимум следующие проблемы:
- Поскольку JVM не понимает ваш список, GC съедает элементы.
- Поскольку Unsafe является недокументированной частью Oracle/Sun JRE, он может отсутствовать в других JRE и может исчезнуть в любое время.
- Так как возня с указателями — это операция, подверженная ошибкам, вы можете сломать свою виртуальную машину или получить странный результат из-за разрушения структур памяти.
И наконец: НЕ ДЕЛАЙТЕ ЭТОГО.
Если вы просто хотите поиграть со списком, реализуйте его внутри массива (используйте индексы вместо указателей). Это безопасно и будет работать. Однако связанные списки — довольно неэффективные структуры, почти непригодные для использования большую часть времени.
Unsafe
. я бы легко удвоил это (если бы это было возможно) с примером кода.
- person Riduidel; 28.01.2011
Нет, ты не можешь. В Java нет встроенного средства для получения адресов объектов. Это все еще можно сделать с помощью sun.misc.Unsafe
, но вы должны знать, что делаете, используя этот класс.
В Java невозможно выполнить операцию XOR между ссылочными узлами. XOR — побитовый логический оператор. Его можно использовать только для выполнения операций с двоичными цифрами/логическими значениями, и мы не можем преобразовать адреса памяти в java в целые числа.