2012-04-21 21 views
16

बजाय hashmap का उपयोग वस्तु वर्ग ...... HashMap का उपयोग का उपयोग करने के लिए यह अच्छा है ....कक्षा वस्तु बनाम HashMap

Map<String, String> cellMap = new HashMap<String, String>(); 
int j = 0; 
while (cellIter.hasNext()) 
{ 
    HSSFCell myCell = (HSSFCell) cellIter.next(); 
    cellMap.put(columnMap[j], myCell.toString()); 
    j++; 
} 

और वस्तु वर्ग का उपयोग कर .....

ABC abc= new ABC(); 
abc.setA(myRow.getCell(0).toString()); 
abc.setB(myRow.getCell(1).toString()); 
abc.setC(myRow.getCell(2).toString()); 

कृपया मुझे आवेदन स्वास्थ्य, स्मृति आवश्यकता आदि के संदर्भ में बताओ ...

+1

असल में मैं एक xls फ़ाइल जो एक करके xls फ़ाइल से डेटा ** एक पढ़कर रिकॉर्ड मेरे बॉस ने मुझसे पूछा है ओरेकल अद्यतन करने के लिए लाखों की संख्या में शामिल होंगे पढ़ रहा हूँ ** केवल का उपयोग कर के स्थान पर वस्तु वर्ग के getters और setters का उपयोग कर एक हैशप जिसमें सभी डेटा मैप करते हैं और फिर इसे ऑरैकल में पास करते हैं। – abhi

+2

गैर-भारतीयों के लिए, 1 लाख = 100 के :-) –

+0

यदि आप हैश मैप का उपयोग करते हैं, तो आप इसे ओरेकल में संग्रहीत करते समय मूल्य के "प्रकार" को कैसे प्राप्त करते हैं? (यह मानते हुए कि आपकी स्प्रेडशीट में स्ट्रिंग, न्यूमेरिक वैल्यू इत्यादि जैसे कई प्रकार के मान हैं) – Ushox

उत्तर

25

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

  • हैश नक्शा क्षेत्रों के समान संख्या के साथ एक वर्ग की तुलना में बड़ा स्मृति पदचिह्न
  • हैश नक्शा पुरातन पर मुक्केबाजी
  • हैश नक्शा बनाने के लिए धीमी है बलों और पहुँच गया है

वहाँ भी एक है पठनीयता पर प्रभाव: जब आप व्यवसाय तर्क निश्चित वर्ग वाले वर्ग के लिए विशिष्ट होते हैं, तो एक विशेष उद्देश्य वर्ग स्पष्ट रूप से जीतता है; जब फ़ील्ड गतिशील रूप से कॉन्फ़िगर किए जाते हैं, हैश टेबल आपका एकमात्र विकल्प है। आपके पास एक हाइब्रिड डिज़ाइन भी हो सकता है, जब कोई ऑब्जेक्ट आंतरिक रूप से अपने स्टोरेज के लिए हैश मैप का उपयोग करता है, तो अच्छी तरह से नामित फ़ील्ड्स को बाहरी रूप से प्रस्तुत करता है, और जब आप जाते हैं तो अधिक "फ़ील्ड" जोड़ने के लिए अर्थशास्त्र का खुलासा करते हैं।

संक्षेप में, इससे पहले कि आप अपने लचीलेपन के लिए हैश मानचित्र के साथ जाने का फैसला करें, आपको यह तय करना चाहिए कि आपको वास्तव में अपने डिजाइन में उस लचीलापन की आवश्यकता है या नहीं। कभी-कभी, जवाब "हां" होता है, और कभी-कभी यह "नहीं" होता है; इसके लिए "एक आकार सभी फिट बैठता है" समाधान नहीं है।

3

आप प्रदर्शन से पहले एक "डिजाइन" मुद्दे के रूप में यह देखना चाहिए। अच्छे डिजाइन के पक्ष में अग्रिम समयपूर्व अनुकूलन करने की आवश्यकता नहीं है। तो, सवाल यह है: "क्या आपको अपने डोमेन ऑब्जेक्ट एबीसी को पॉप्युलेट करने के लिए मध्यस्थ संग्रह के माध्यम से जाना होगा?" ज्यादातर मामलों में मैं यह नहीं करूँगा लेकिन बड़े संदर्भ को जानने के बिना एक निश्चित हाँ या एक निश्चित नहीं कहना मुश्किल है।

अद्यतन: 30-40K: (: प्रदर्शन के मामले में नहीं डिजाइन के मामले में अप्रासंगिक त्याग) रिकॉर्ड की संख्या वस्तु बनाम HashMap तुलना के लिए अप्रासंगिक है क्योंकि वे एक पाश में संभाला जा करने के लिए जा रहे हैं। हालांकि आपकी स्प्रेडशीट में कॉलम की संख्या महत्वपूर्ण है क्योंकि यह आपके ऑब्जेक्ट में विशेषताओं की संख्या के रूप में सीधे दिखाई देगी।

तो मैं HashMap दृष्टिकोण के साथ जाना चाहते हैं यह सिर्फ एक डेटा प्रवास या आंकड़ा अंतरण व्यायाम है। यह मानते हुए कि एबीसी व्यवहार के बिना एक अल्पकालिक, फेंकने वाला डेटा कंटेनर ऑब्जेक्ट होगा, इसे बनाने की कोई आवश्यकता नहीं है। फिर मैं सिस्टम के प्रदर्शन की जांच करता हूं और यदि यह स्वीकृति मानदंडों को पूरा नहीं करता है तो मैं इसे प्रोफाइल कर दूंगा और केवल तभी अनुकूलित कर सकता हूं जब आवश्यक हो।

+1

हम्म ... अगर सवाल है "क्या मुझे अपने डोमेन ऑब्जेक्ट में ए, बी और सी विशेषताओं के बजाय हैश मैप विशेषता का उपयोग करना चाहिए, तो मैं नहीं हैश मैप का उपयोग करें। ए, बी, सी आपके ऑब्जेक्ट के गुण हैं, उन्हें केवल हैश मैप में संग्रहीत नहीं किया जाना चाहिए। – Ushox

+0

यह वास्तव में हैशपैप या कक्षा का उपयोग करके डेटा को पढ़ने और सेट करने जैसा है ... और फिर इसे पुनर्प्राप्त कर रहा है .. .... – abhi

+0

मेरी पोस्ट अपडेट की गई – Ushox

4

किसी ऑब्जेक्ट में फ़ील्ड (डेटा) और विधियां (व्यवहार) हैं। यदि आपका डेटा कोशिकाओं के एक निश्चित सेट (ए, बी और सी) में होता है, तो निश्चित रूप से किसी ऑब्जेक्ट का उपयोग करें।

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

एक मानचित्र उपयोगी है जब आपको कुंजी और मानों की एक चर संख्या को जोड़ना होगा। लेकिन यह केवल एक डेटा संरचना है, और आपको अतिरिक्त व्यवहार को समाहित करने की अनुमति नहीं देता है।

उदाहरण के लिए, आपके पास आपके ऑब्जेक्ट में getAAndB() विधि हो सकती है जो बी के साथ संयोजित हो जाती है या आपके पास फ़ील्ड को बदलने या क्वेरी करने के तरीके हो सकते हैं। या आप एबीसी उदाहरणों को अन्य वस्तुओं के लिए पास कर सकते हैं जो उनका उपयोग करते हैं। एक ऑब्जेक्ट का उपयोग एबीडी अच्छी तरह से परिभाषित विधियों के साथ Map<String, String> का उपयोग करने से कहीं अधिक आसान है। मानचित्र की चाबियाँ क्या हैं? उनके मूल्य क्या हैं? यह कहां दस्तावेज है? क्या होगा यदि आप चाबियाँ बदलना चाहते हैं? कोड में उन सभी स्थानों का पता कैसे लगाया जाएगा जहां इन चाबियों का उपयोग किया जाता है?

+0

मैंने निश्चित स्थिति पर निश्चित कॉलम के साथ पढ़ने के लिए डेटा तय किया है ..... प्रत्येक मान की कुंजी भी तय की जा सकती है जैसे आप कर सकते हैं मैं एक निश्चित स्ट्रिंग सरणी को हैशपैप में कुंजी के रूप में पास कर रहा हूं ... और मैं चाबियाँ बदलना नहीं चाहता .... मुझे पता है कि मैं इन चाबियों का उपयोग कहां करूँगा .... चीजें हैं अगर ऊपर से किसी भी चीज को विफल करता है बस एक त्रुटि – abhi

+1

फिर एक वस्तु का उपयोग करें। यदि आप एक्सेल फ़ाइल की वैधता के बारे में निश्चित नहीं हैं, तो इसे पढ़ने या इसे पढ़ने के दौरान इसे सत्यापित करें और अपनी ऑब्जेक्ट्स के उदाहरण बनाएं (जांचें कि अनिवार्य कोशिकाएं आबादी में हैं, उदाहरण के लिए)। लेकिन (कोशिकाओं का मानना ​​है कि कोशिकाओं के क्षेत्र का प्रतिनिधित्व करते हैं), यह किसी अन्य नाम, मध्य नाम और मानचित्र <स्ट्रिंग, स्ट्रिंग> से निपटने से अंतिम नाम रखने वाले व्यक्तियों के साथ सौदा करने के लिए और अधिक पठनीय है। –

+1

मुझे यह मिला कि ऐसा लगता है कि ऑब्जेक्ट को जाने के लिए पसंदीदा विकल्प होगा ..... – abhi

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