2016-05-15 9 views
5

चूंकि जावा ऑब्जेक्ट का पता पाने का कोई तरीका नहीं प्रदान करता है, क्या यह XOR linked list कोड करने के लिए संभव है?क्या हम जावा में एक्सओआर लिंक्ड सूची को कार्यान्वित कर सकते हैं?

यदि हां, तो कृपया कोई विस्तृत कर सकते हैं, यह कैसे करें?

+0

कुछ भी संभव है। कृपया स्पष्ट करें: मुझे पता है कि एक्सओआर क्या है; मैं लिंक्ड सूचियों को जानता हूँ। एक्सओआर लिंक्ड सूची क्या है? कोई और कोई लिंक नहीं है जो मुझे पता है। – duffymo

+0

@duffymo https://en.wikipedia.org/wiki/XOR_linked_list –

+0

इसे मिला: https://en.wikipedia.org/wiki/XOR_linked_list। ऐसी बात कभी नहीं सुनी। मैं शर्त लगा रहा हूं कि आप इसे किसी भी भाषा में कार्यान्वित कर सकते हैं। – duffymo

उत्तर

1

आप जावा में ऐसा कभी नहीं कर सकते हैं।

यहां तक ​​कि अगर आप sun.misc.Unsafe का उपयोग की वस्तुओं की वास्तविक पतों तक पहुंच प्राप्त करने के लिए, और भी यदि आप एक कचरा कलेक्टर के आसपास वस्तुओं को स्थानांतरित नहीं होगा का उपयोग करें (समवर्ती मार्क स्वीप वस्तुओं को स्थानांतरित नहीं है, मैं मान लीजिए, क्योंकि यह "गैर-कॉम्पैक्टिंग" है), आपको एक बड़ी समस्या है: prev और next ऑब्जेक्ट संदर्भ एक पूर्णांक में एक साथ जोड़कर, कचरा कलेक्टर यह महसूस नहीं करेगा कि वे ऑब्जेक्ट संदर्भ हैं। तो ऐसा लगता है कि निर्दिष्ट वस्तुओं को संदर्भित नहीं किया गया है, और इसके परिणामस्वरूप, आपकी सभी सूची नोड्स को कचरा के रूप में एकत्रित किया जाएगा।

यदि आपको स्मृति को सहेजने की आवश्यकता है, तो किसी लिंक की गई सूची के बजाय सरणी-आधारित सूची का उपयोग करें।

3

मुझे विश्वास नहीं है कि आप कम से कम अपने "अगले" और "पिछला" पॉइंटर्स के लिए ऑब्जेक्ट संदर्भों का उपयोग नहीं कर सकते हैं), ऑब्जेक्ट पते आधिकारिक तौर पर अपारदर्शी हैं। हालांकि हम किसी संदर्भ के बिट्स तक पहुंच सकते हैं, JVM मेमोरी में ऑब्जेक्ट्स (उदाहरण के लिए, मेमोरी मैनेजमेंट करते समय) को स्थानांतरित कर सकता है, और हालांकि मुझे तुरंत इसके लिए एक स्पेस उद्धरण नहीं मिल रहा है, मुझे विश्वास है कि इसे संभालने की अनुमति है कि ऑब्जेक्ट रेफरेंस वैल्यू को संशोधित करके (सचमुच जा रहा है और प्रत्येक फ़ील्ड को अपडेट कर रहा है और जहां पुराना संदर्भ है, इसे नया संदर्भ दे रहा है)। इसलिए यदि हमने ऑब्जेक्ट संदर्भ को long (उदाहरण के लिए) में परिवर्तित किया है और फिर XOR'd कि किसी अन्य ऑब्जेक्ट संदर्भ के साथ long में परिवर्तित किया गया है, यदि कोई ऑब्जेक्ट स्थानांतरित हो गया है (जैसा कि वे कर सकते हैं), तो उनमें से एक बार XOR'd वापस आ गया है और किसी ऑब्जेक्ट संदर्भ में वापस परिवर्तित किया गया है, यह अब मान्य नहीं हो सकता है।

नतीजतन, मुझे लगता है कि आपको पॉइंटर्स के लिए ऑब्जेक्ट संदर्भों के अलावा कुछ और उपयोग करने की आवश्यकता होगी, जैसे इंडेक्स ऑब्जेक्ट रेफरेंस की एक बड़ी श्रृंखला में, जिस बिंदु पर मुझे काफी यकीन है कि आपने मेमोरी लाभ खो दिया है एक्सओआर लिंक्ड सूची।

संबंधित मुद्दे