2010-09-08 20 views
27

मैं जावा हैश मैप बनाम JSONObject के प्रदर्शन के बारे में सोच रहा हूं।जावा हैश मैप बनाम JSONObject

ऐसा लगता है कि JSONObject आंतरिक रूप से हैश मैप का उपयोग कर डेटा संग्रहीत करता है। लेकिन JSONObject के पास हैश मैप की तुलना में अतिरिक्त ओवरहेड हो सकता है।

क्या कोई हैश मैप की तुलना में जावा JSONObject के प्रदर्शन के बारे में जानता है?

धन्यवाद!

उत्तर

31

जैसा कि आपने कहा था, JSONObject को HashMap द्वारा समर्थित किया गया है।

इस वजह से, प्रदर्शन लगभग समान होगा। JSONObject.get() एक शून्य जांच जोड़ता है, और यदि कोई कुंजी नहीं मिलती है तो अपवाद फेंक देगा। JSONObject.put() बस map.put() पर कॉल करता है।

तो, लगभग कोई ओवरहेड नहीं है। यदि आप JSON ऑब्जेक्ट्स से निपट रहे हैं, तो आपको हमेशाJSONObjectHashMap पर उपयोग करना चाहिए।

+6

असल में मैं इस से असहमत हूं - चूंकि JSONObject एक लाइब्रेरी के लिए विशिष्ट है, मैप्स के विपरीत, इसे एक प्रकार के रूप में उजागर करने से विशिष्ट लाइब्रेरी और इसके डेटाटाइप में अधिक युग्मन होगा। तो मैं स्पष्ट रूप से यह नहीं कहूंगा कि इसे हमेशा इस्तेमाल किया जाना चाहिए। – StaxMan

+0

@Stax, मैं आपका बिंदु देख सकता हूं। लेकिन, अगर आपको कोड का एक हिस्सा दोबारा जोड़ना है, तो आप हमेशा डेटा को मानचित्र में निकाल सकते हैं। – jjnguy

+0

सच है। मुझे लगता है कि कुल मिलाकर पीओजेओ बनाम लाइब्रेरी-विशिष्ट अबास्ट्रक्शन का सवाल है; मैं डेटा स्वरूप पहलुओं को किनारों के करीब रखना चाहता हूं। – StaxMan

7

मैं कहूंगा कि सवाल कुछ कारणों से कोई मतलब नहीं है:

  1. संतरे की तुलना सेब: HashMap और JSONObject 2 पूरी तरह से अलग उद्देश्यों के लिए कर रहे हैं। यह पूछने की तरह है "क्या व्यक्ति वर्ग या कंपनी वर्ग फोन नंबर ऑब्जेक्ट को स्टोर करने के लिए अधिक कुशल है"। समझ में आता है क्या उपयोग करें।
  2. यदि आप JSON से/में कनवर्ट कर रहे हैं, तो संभवतः आप डेटा को दूर-दूर तक (उपयोगकर्ता के ब्राउज़र की तरह) भेज रहे हैं। नेटवर्क पर इस डेटा को भेजने और उपयोगकर्ता के ब्राउज़र में इसका मूल्यांकन करने का समय (संभवतः) हैशमैप या JSONObject को पॉप्युलेट करने के किसी भी प्रदर्शन अंतर को ग्रहण करेगा।
  3. वहां 1 से अधिक "JSONObject" कार्यान्वयन है जो वहां के आसपास तैर रहा है।
  4. अंत में, आपने यह नहीं पूछा है कि आप किस प्रकार के प्रदर्शन को मापना चाहते हैं। आप वास्तव में इन कक्षाओं के साथ क्या करने की योजना बना रहे हैं?
1

JSONObject के पास हैश मैप के शीर्ष पर बहुत अधिक अतिरिक्त ओवरहेड नहीं है। यदि आप हैश मैप का उपयोग करने के ठीक हैं तो आपको JSONObject का उपयोग करके ठीक होना चाहिए। यह प्रदान किया जाता है कि आप JSON उत्पन्न करना चाहते हैं।

JSONObject आपके JSONObject के हिस्से के रूप में संग्रहीत मूल्यों की वैधता के लिए जांच करता है, यह सुनिश्चित करने के लिए कि यह JSON spec के अनुरूप है। उदाहरण के लिए NaN मान मान्य JSON का एक हिस्सा नहीं बनाते हैं। इसके अलावा, JSONObject जेसन स्ट्रिंग (नियमित | prettfied) उत्पन्न कर सकते हैं। JSON की मात्रा के आधार पर, वे तार बहुत बड़े हो सकते हैं। इसके अलावा, JSONObject स्ट्रिंगबफर का उपयोग करता है, इसलिए मैं कई चीजों में से एक स्ट्रिंगबिफर के साथ स्ट्रिंगबफर के सभी घटनाओं को प्रतिस्थापित करना होगा।

JSONObject (org.json से) सरल जेएसओएन पुस्तकालयों में से एक है जिसका आप उपयोग कर सकते हैं। यदि आप कुछ बहुत कुशल चाहते हैं, तो जैक्सन की तरह कुछ उपयोग करें।

4

मौजूदा उत्तर सही हैं, दोनों के बीच प्रदर्शन अंतर नगण्य हैं।

दोनों मूल रूप से डेटा भंडारण और कुशलतापूर्वक अक्षम करने के अक्षम तरीके हैं। आमतौर पर नियमित जावा ऑब्जेक्ट्स में बाध्य करने के लिए अधिक कुशल विधि होती है, जो कम स्मृति का उपयोग करती है और पहुंच के लिए तेज़ होती है। कई डेवलपर org.json की सरल (आदिम) लाइब्रेरी का उपयोग करते हैं क्योंकि यह जाना जाता है, लेकिन यह संभव है कि कम से कम सुविधाजनक और कुशल विकल्प उपलब्ध हो।जैक्सन और जीसन जैसे विकल्प बड़े सुधार हैं, इसलिए इनका उपयोग करने पर विचार करना उचित है।

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