जावा अजगर के शब्दकोश के बराबर है


93

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

जवाबों:


106

अजगर का dictवर्ग एक कार्यान्वयन है जिसे पायथन प्रलेखन अनौपचारिक रूप से " मैपिंग प्रकार " कहता है । आंतरिक रूप से, dictहैशटेबल का उपयोग करके लागू किया जाता है।

जावा का HashMapवर्ग Mapइंटरफ़ेस का कार्यान्वयन है । आंतरिक रूप से, HashMapहैशटेबल का उपयोग करके लागू किया जाता है।

वाक्यविन्यास में कुछ मामूली अंतर हैं, और मेरा मानना ​​है कि कार्यान्वयन थोड़ा अलग तरीके से ट्यून किए गए हैं, लेकिन कुल मिलाकर वे पूरी तरह से विनिमेय हैं।


40
कोई उदाहरण नहीं दिया गया :(
कामरान बिगली

1
@kami: आप किस तरह का उदाहरण चाहते हैं?
बजे डेनियल प्राइडेन

5
कोई भी उदाहरण जो क्रिया में अजगर के शब्दकोश के बराबर एक जावा दिखाता है। एक उपयोगी उत्तर में कुछ उदाहरण शामिल हैं क्योंकि अधिकांश लोग उदाहरण देखने और उन्हें अपने कोड में उपयोग करने के लिए यहां आते हैं।
कामरान बिग्ली

13
@kami: मुझे नहीं लगता कि यह सही है। सवाल यह नहीं पूछता है "कुछ विशिष्ट पायथन कोड के लिए समकक्ष जावा कोड क्या है"। वास्तव में प्रश्न में कोई भी कोड शामिल नहीं है। मुझे यकीन नहीं है कि जावा में मैप एपीआई का उपयोग करने के उदाहरणों को जोड़ने का मूल्य क्या होगा; यह उत्तर पहले से ही विहित प्रलेखन से जुड़ा हुआ है। यदि आप जावा सीखना चाहते हैं, तो एक ट्यूटोरियल से शुरू करें, स्टैक ओवरफ्लो नहीं। मुझे निश्चित रूप से नहीं लगता है कि यह उत्तर एक डाउनवोट वारंट करता है, क्योंकि इसमें कॉपी-पेस्ट करने योग्य कोड नमूने का अभाव है।
डैनियल प्रेडेन

4
उस टिप्पणी को पढ़ने के लिए दुखी होकर "अधिकांश लोग उदाहरणों को देखने और उन्हें अपने कोड में उपयोग करने के लिए यहां आते हैं ", मुझे आशा है कि यह गलत है।
0xc0de

31

शब्दकोश और मानचित्र का विचार समान है। दोनों में तत्व जैसे हैं

key1:value1, key2:value2 ... and so on

जावा में, Mapअलग-अलग तरीकों से लागू किया जाता है जैसे HashMap, या TreeMapआदि put(), get()ऑपरेशन समान हैं

import java.util.HashMap;

Map map = new HashMap();
// Put elements to the map
map.put("Ram", new Double(3434.34));
map.put("Krishna", new Double(123.22));
map.put("Hary", new Double(1378.00));
//to get elements
map.get("Krishna"); # =123.22
map.get("Hary"); # = 1378.00 

Java8 में HashMap के प्रलेखन देखें https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

जहाँ तक मुझे पता है (मैं वास्तव में जावा का उपयोग नहीं करता) शब्दकोश एक हैशमैप / हैशटेबल का दूसरा नाम है।

Http://www.fluffycat.com/Java/HashMaps/ से कोड हथियाने पर ऐसा लगता है कि वे थोड़े से अतिरिक्त जावा बॉयलर-प्लेट के साथ उपयोग किए जाते हैं।


3
जावा में एक शब्दकोश इंटरफ़ेस भी है जिसे हैशटेबल द्वारा कार्यान्वित किया जाता है। हशपप आम तौर पर पसंद किया जाता है, हालांकि।
माइकल मायर्स

1
@Michael मायर्स: शब्दकोश पदावनत है, ओरेकल ने इसके बजाय docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

दोनों के बीच एक अंतर यह है कि dictडेटा की कुंजी एक कुंजी के रूप में कार्य कर सकती है। जावा किसी भी ऑब्जेक्ट को एक कुंजी के रूप में काम करने की अनुमति देगा - हालांकि आपको यह सुनिश्चित करने के लिए ध्यान रखना चाहिए कि ऑब्जेक्ट की hashCode()विधि एक अद्वितीय मान लौटाती है जो इसकी आंतरिक स्थिति को दर्शाती है। पाइथन को हैशेबल की परिभाषा को फिट करने के लिए कुंजियों की आवश्यकता होती है , जो यह निर्दिष्ट करती है कि ऑब्जेक्ट का हैश कोड अपने जीवनकाल में कभी नहीं बदलना चाहिए।


1
यह सच है, लेकिन यह वास्तव में या तो भाषा द्वारा लागू नहीं किया गया है। स्पष्ट रूप से या तो जावा hashCode()विधि या पायथन __hash__()पद्धति में, आपको एक अद्वितीय मान लौटाने का प्रयास करना चाहिए जो आंतरिक स्थिति को दर्शाता है। या तो जावा या पाइथन में, यदि आपके पास एक उत्परिवर्तनीय वस्तु है, तो संभवत: यह एक हैशटेबल कुंजी नहीं होनी चाहिए, इसलिए यह अपवाद hashCode()या __hash__()तरीकों से अपवाद फेंकने के लिए समझ में आता है ।
डैनियल प्रीडेन

1
मेरे अनुभव में, पायथन में लगभग कुछ भी एक महत्वपूर्ण कुंजी हो सकती है ... 'सख्त आवश्यकता' क्या है?
रॉन क्लियान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.