2013-06-03 7 views
13

Pair Class and a HashMap के बीच क्या अंतर है। मैं उन दोनों को key and value देख रहा हूं।जोड़ी कक्षा का उपयोग क्या है और यहां कार्यान्वित क्यों किया गया है?

इससे पहले कोड:

List<Patient> patientDetails = new ArrayList<Patient>(); 
Patient patientInfo = new Patient(); 
patientInfo.setReligion(Constants.ReligionArray[custom.getReligion()]); 
patientDetails.add(patientInfo); 

कोड यह आज के लिए बदल दिया गया है।

बदला गया कोड

List<Pair<String, String>> patientInfo = new ArrayList<Pair<String, String>>(); 
patientInfo.add(new Pair<String, String>("Religion", Constants.ReligionArray[custom.getReligion()])); 
  1. क्यों वे एक Pair Class here? क्या कारण हो सकता लागू किया है।
  2. Pair Class and a HashMap के बीच क्या अंतर है।

नोट: दोनों कोड पूरी तरह से काम करते हैं।

+0

क्यों? शायद क्योंकि एक वस्तु में एक रोगी के बारे में सबकुछ संग्रह करना सुरक्षा के लिए और अन्यथा एक अच्छा विचार नहीं है। इस तरह आप रोगियों की जानकारी तक पहुंच को अमूर्त कर सकते हैं। – arynaq

+1

मैं आपको हैश टेबल डेटा संरचना के बारे में नहीं जानता, है ना? – acdcjunior

उत्तर

2

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

कोड आप संदर्भित कर रहे एक वर्ग Patient (जो वास्तव में लगता है कि यह PatientInfo बुलाया जाना चाहिए) पुरातन की एक सूची में उपयोग करने का एक वस्तु उन्मुख दृष्टिकोण से परिवर्तित किया जाता है, वे essentialy रहे हैं "deObjectOrienting" वर्ग।

तो उनके मॉडल में प्रत्येक वर्ग चर Pair बन जाता है जहां परिवर्तनीय नाम कुंजी बन जाता है, और परिवर्तनीय मान मान बन जाता है।

यहाँ एक विस्तारित उदाहरण वर्ग

// Old style (Object oriented) 
class PatientInfo{ 
    String religion; 
    String address; 
} 
PatientInfo patientInfo = new PatientInfo(); 
patientInfo.setReligion("myReligionName"); 
patientInfo.setAddress("address of the patient"); 

// New Style, key/value primitive pairs (very not object oriented) 
Pair<String,String> religionInfo = new Pair<String,String>("religion","myReligionName"); 
Pair<String,String> addressInfo = new Pair<String,String>("address","address of the patient"); 

वे तो इन जोड़ना है या तो Patient या एक सूची में Pair

कोई ऐसा क्यों करेगा एक अच्छा सवाल है। अधिकांश लोग अधिक ऑब्जेक्ट उन्मुख बनने की कोशिश करते हैं क्योंकि यह कोडिंग को आसान बनाता है। शायद चूंकि यह क्लैस में केवल एक ही चर है, उन्होंने सोचा कि कक्षा पूरी तरह से क्यों नहीं हटाती?

एक जोड़ी और हैश मैप के बीच आपके मूल प्रश्न के लिए। एक जोड़ी सिर्फ एक कुंजी/मूल्य है। एक हैश मैप संग्रह आमतौर पर कई कुंजी/मूल्य जोड़े को स्टोर करने के लिए उपयोग किया जाता है। यहां वे एक सूची का उपयोग कर रहे हैं जहां उन्हें शायद हैश मैप का उपयोग करना चाहिए।

0

Pair ऑब्जेक्ट स्टोर बिल्कुल एक कुंजी और एक मान। एक HashMap एक संरचना है जहां आप कई कुंजी/मूल्य जोड़े स्टोर कर सकते हैं।

+0

असल में, 'हैश मैप' एक 'मानचित्र' है, न कि 'संग्रह'। – Genzer

+0

आप सही हैं, मैंने अपना जवाब सही किया। – eternay

+0

जेनरिक के साथ एक जोड़ी समझ में आ जाएगा। –

0

ए "जोड़ी" उन वस्तुओं की एक जोड़ी है जिसे आप किसी तरह से या किसी अन्य तरीके से संबंधित करना चाहते हैं। कोई महत्वपूर्ण प्रवर्तन, वस्तुओं की सूची या कुछ भी नहीं है। यह केवल एक शॉर्टकट है जब आपके पास ऐसी चीजों की एक जोड़ी है जो वास्तव में वस्तुओं की एक जोड़ी के रूप में सबसे उपयोगी होती है, लेकिन पर्याप्त पर्याप्त संरचना जहां उन्हें अलग करने के लिए एक अलग वर्ग बनाने की आवश्यकता नहीं होती है। उदाहरण: आयत पर अंक, डोमेन पर आईपी पते इत्यादि।

एक हैशप को "कुंजी" विनिर्देश के प्रवर्तन के साथ जोड़ों के मैपिंग के रूप में माना जा सकता है। इस मामले में जोड़ी का पहला आइटम "निरंतर" बन जाता है और दूसरे आइटम को संदर्भित करने के लिए उपयोग किया जाता है। जोड़े के मेरे उदाहरण में मैंने डोमेन पर आईपी पते का इस्तेमाल किया। इस मामले में हम डोमेन को "कुंजी" के रूप में उपयोग करेंगे और मशीन के आईपी पते को संदर्भित करने के लिए इसका इस्तेमाल करेंगे। यह आईपी एड्रेस निश्चित रूप से बदल सकता है, लेकिन डोमेन हमेशा एक जैसा होगा, और वर्तमान में संबंधित आईपी पते को तुरंत देखने के लिए उपयोग किया जाता है। ध्यान दें, कि जोड़ी में पहली वस्तु का प्रतिबंध "कुंजी" हैश नक्शा से आता है, और जोड़ी का विनिर्देश नहीं है। हैशपैप का हैश हिस्सा तब संदर्भित करता है कि इस मामले में एक हैश टेबल, जोड़ी में 'पहली' वस्तु पर ...

7

असल में, आपका कोड सामान्य जावा दृष्टिकोण से दूर हो गया है जिसे अक्सर "ऑब्जेक्ट इनकारियल" कहा जाता है। जो प्रतिस्थापन हुआ वह समर्पित डोमेन ऑब्जेक्ट Patient से सामान्य Pair<String, String> में है।

तो आप List<Pair<String,String>> और Map<String,String> के बीच के अंतर के बारे में पूछ रहे हैं। पूर्व में अधिक जानकारी होती है क्योंकि यह व्यक्तिगत जोड़े के सम्मिलन आदेश को बनाए रखती है और सूची में स्थिति के आधार पर यादृच्छिक पहुंच भी देती है।

दूसरी तरफ, Map, कुंजी पर आधारित कुशल लुकअप की अनुमति देता है, जो वास्तव में आवश्यक है।

7
  1. Pair वर्ग सिर्फ इतना है कि एक विशेष नाम नहीं है (Person के विपरीत) दो क्षेत्रों, के साथ एक संरचना है। जोड़े (और अधिक आम तौर पर, tuples) अक्सर पाइथन जैसे भाषाओं में उपयोग किया जाता है जब आप कुछ मध्यवर्ती संरचना को नाम नहीं देना चाहते हैं। आपके मामले में, संभवतः (संभवतः) परिभाषित Person ऑब्जेक्ट के बजाय आपके पास एक सरल पूर्ण परिभाषित वस्तु है।शायद, Pair का उपयोग जावा में संदिग्ध है, बल्कि बदसूरत वाक्यविन्यास की बीकोज़ (पायथन की तुलना में, जहां जोड़ी सिर्फ ("Religion", religions) होगी)।

  2. आप पहले तत्व पर अद्वितीय बाधा वाले जोड़े के संग्रह के रूप में Map के बारे में सोच सकते हैं।

6

मुझे लगता है कि सवाल का आग्रह कर रहे है: क्या List<Pair<T,S>> और HashMap<T,S> के बीच अंतर है। वहां कई हैं।

सामान्य में, एक Map वस्तु एक कुंजी के साथ एक मूल्य के सहयोगी और जल्दी से कुंजी के आधार पर मूल्यों को प्राप्त करने के लिए साधन उपलब्ध कराने के लिए किया जाता है। आमतौर पर एक कुंजी से जुड़ा एक मूल्य हो सकता है।

List एक ऑर्डर किया गया कंटेनर है जिसमें ऑब्जेक्ट्स संग्रहीत किए जाते हैं, इसकी सामग्री को फिर से चालू करने और सूची में इसके स्थान के आधार पर तत्व प्राप्त करने के लिए एक तत्व प्राप्त होता है (एनएच तत्व प्राप्त करें)। आमतौर पर एक ही तत्व को सूची में डुप्लिकेट किया जा सकता है।

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

यदि आप एक नक्शा इस्तेमाल करते थे, तो प्रत्येक रोगी के पास एक ही धर्म होता था (या कोई नहीं)। आप Map<String,String>.get(String key)

+0

में निर्देशांक के बारे में सोचें एक मॉडल जो प्रति व्यक्ति कई धर्मों का समर्थन करता है --- * overengineering * के अर्थ को सिखाने का एक अच्छा विचार क्या है! –

+0

@MarkoTopolnik यह एक दुर्भाग्यपूर्ण उदाहरण है, क्षमा करें:/लेकिन मुझे लगता है कि फोन नंबर या अन्य 1-कई इकाइयों को संग्रहित करना "रोगी विवरण" में एक संभावना है। – Dariusz

+0

मैं एक स्माइली डालना भूल गया, क्षमा करें :-) मैंने लिखा है कि हंसी के लिए। –

1

Pair कक्षा की तुलना हैशैप के Map.Entry से की जा सकती है। एक हैश मैप में कई कुंजी/वैल्यू जोड़े संग्रहीत हो सकते हैं और कुंजी द्वारा कुशलता से देखा जा सकता है।

जोड़े की एक सूची को अक्षमता (आकार के आधार पर) बिना कुंजी के ऊपर देखा जा सकता है, लेकिन इसे इंडेक्स द्वारा संदर्भित किया जा सकता है। सूची में एक और केवल एक कुंजी लागू करने के लिए कुछ भी नहीं है।

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