Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

JShell में Java 9: HashMap, LinkedHashMap और TreeMap कार्यान्वयन

JShell Java 9 में पेश किया गया एक इंटरैक्टिव REPL टूल है जो मैप कार्यान्वयन जैसे डेटा संरचनाओं का त्वरित परीक्षण और सीखने के लिए आदर्श है। Java में Map इंटरफेस कुंजी-मान जोड़े को संग्रहीत करता है, और इसकी तीन मुख्य कार्यान्वयन कक्षाएं हैं जिनके अलग-अलग क्रम व्यवहार हैं।

तीन Map कार्यान्वयन की तुलना

कार्यान्वयनक्रमनल कुंजीनल मानथ्रेड-सुरक्षितप्रदर्शन
HashMapकोई गारंटी नहीं (अनियमित)अनुमत (1)अनुमतनहींO(1) सर्वोत्तम
LinkedHashMapसम्मिलन क्रमअनुमत (1)अनुमतनहींO(1) + ओवरहेड
TreeMapकुंजियों का प्राकृतिक क्रम (सॉर्टेड)अनुमत नहींअनुमतनहींO(log n)

JShell सत्र: HashMap

विशेषता: तत्व न तो सम्मिलन क्रम में और न ही सॉर्टेड क्रम में संग्रहीत होते हैं।

jshell> HashMap hashMap = new HashMap<>()
hashMap ==> {}

jshell> hashMap.put("Adithya", 101)
$2 ==> null

jshell> hashMap.put("Jai", 102)
$3 ==> null

jshell> hashMap.put("Chaitanya", 103)
$4 ==> null

jshell> hashMap.put("Ravi", 104)
$5 ==> null

jshell> hashMap
hashMap ==> {Chaitanya=103, Jai=102, Ravi=104, Adithya=101}
// नोट: क्रम अनियमित है (हैश-आधारित)

JShell सत्र: LinkedHashMap

विशेषता: तत्व सम्मिलन क्रम में संग्रहीत होते हैं।

jshell> LinkedHashMap linkedHashMap = new LinkedHashMap<>()
linkedHashMap ==> {}

jshell> linkedHashMap.put("Raja", 101)
$8 ==> null

jshell> linkedHashMap.put("Adithya", 102)
$9 ==> null

jshell> linkedHashMap.put("Surya", 103)
$10 ==> null

jshell> linkedHashMap.put("Vamsi", 104)
$11 ==> null

jshell> linkedHashMap
linkedHashMap ==> {Raja=101, Adithya=102, Surya=103, Vamsi=104}
// नोट: सम्मिलन क्रम संरक्षित है

JShell सत्र: TreeMap

विशेषता: तत्व कुंजियों के प्राकृतिक क्रम (सॉर्टेड) में संग्रहीत होते हैं।

jshell> TreeMap treeMap = new TreeMap<>()
treeMap ==> {}

jshell> treeMap.put("Raj", 101)
$14 ==> null

jshell> treeMap.put("Pavan", 102)
$15 ==> null

jshell> treeMap.put("Arjun", 103)
$16 ==> null

jshell> treeMap.put("Manoj", 104)
$17 ==> null

jshell> treeMap
treeMap ==> {Arjun=103, Manoj=104, Pavan=102, Raj=101}
// नोट: वर्णानुक्रम में सॉर्टेड (Arjun, Manoj, Pavan, Raj)

व्यावहारिक JShell प्रयोग

jshell> // TreeMap में कस्टम Comparator
jshell> TreeMap reverseMap = new TreeMap<>(Comparator.reverseOrder())
reverseMap ==> {}

jshell> reverseMap.put("Raj", 101)
$2 ==> null

jshell> reverseMap.put("Arjun", 103)
$3 ==> null

jshell> reverseMap
reverseMap ==> {Raj=101, Pavan=102, Manoj=104, Arjun=103}
// उल्टा वर्णानुक्रम

jshell> // LinkedHashMap: एक्सेस क्रम (LRU कैश के लिए)
jshell> LinkedHashMap lruCache = new LinkedHashMap<>(16, 0.75f, true)
lruCache ==> {}

jshell> lruCache.put(1, "One")
$5 ==> null

jshell> lruCache.put(2, "Two")
$6 ==> null

jshell> lruCache.get(1) // एक्सेस क्रम अपडेट करता है
$7 ==> "One"

jshell> lruCache
lruCache ==> {2=Two, 1=One} // 1 हाल ही में एक्सेस किया गया, अंत में चला गया

सामान्य ऑपरेशन (सभी Maps के लिए)

jshell> Map map = new HashMap<>()
map ==> {}

jshell> map.put("A", 1)
$2 ==> null

jshell> map.get("A")
$3 ==> 1

jshell> map.getOrDefault("Z", 99)
$4 ==> 99

jshell> map.containsKey("A")
$5 ==> true

jshell> map.containsValue(1)
$6 ==> true

jshell> map.remove("A")
$8 ==> 1

jshell> map.size()
$9 ==> 0

jshell> map.isEmpty()
$10 ==> true

jshell> // बल्क ऑपरेशन
jshell> map.putAll(Map.of("X", 10, "Y", 20, "Z", 30))
$11 ==> null

jshell> map.keySet()
$12 ==> [X, Y, Z]

jshell> map.values()
$13 ==> [10, 20, 30]

jshell> map.entrySet()
$14 ==> [X=10, Y=20, Z=30]

jshell> // Java 9+ फैक्टरी मेथड्स
jshell> Map.of("A", 1, "B", 2) // अपरिवर्तनीय
$15 ==> {A=1, B=2}

jshell> Map.ofEntries(Map.entry("A", 1), Map.entry("B", 2))
$16 ==> {A=1, B=2}

कौन सा चुनें?

  • HashMap: सामान्य उद्देश्य, उच्चतम प्रदर्शन, क्रम मायने नहीं रखता।
  • LinkedHashMap: जब सम्मिलन क्रम (या एक्सेस क्रम) मायने रखता है - कॉन्फ़िगरेशन, कैश, क्रमबद्ध प्रसंस्करण।
  • TreeMap: जब सॉर्टेड कुंजियों की आवश्यकता होती है - रेंज क्वेरीज, नेविगेशन (firstKey(), higherKey(), subMap())।

थ्रेड सुरक्षा नोट

इनमें से कोई भी थ्रेड-सुरक्षित नहीं है। समवर्ती पहुंच के लिए उपयोग करें:

  • ConcurrentHashMap (अनुशंसित - उच्च समवर्ती)
  • Collections.synchronizedMap(new HashMap<>()) (सरल लेकिन धीमा)
  1. Java 9 में JavaFX का उपयोग करके JShell को प्रोग्रामेटिक रूप से लागू करें Java 9 में JavaFX का उपयोग करके JShell को प्रोग्रामेटिक रूप से लागू करें

    Java 9 ने jdk.jshell API पेश किया जो डेवलपर्स को अपने एप्लिकेशन में JShell कार्यक्षमता को एम्बेड करने की अनुमति देता है। यह लेख दिखाता है कि एक JavaFX एप्लिकेशन कैसे बनाया जाए जो JShell का उपयोग करके कोड स्निपेट्स का मूल्यांकन करता है और परिणाम प्रदर्शित करता है। आवश्यक निर्भरताएं Java 9+ (JSh

  1. जावा 9 में JShell में स्निपेट को सेव, एडिट और ड्रॉप कैसे करें? जावा 9 में JShell में स्निपेट को सेव, एडिट और ड्रॉप कैसे करें?

    जावा शेल या JShell जावा 9 के साथ पेश किया गया एक आधिकारिक REPL (रीड-इवैल्यूएट-प्रिंट-लूप) है। यह मुख्य() मेथड की आवश्यकता के बिना या कोड को निष्पादित करने से पहले कंपाइल किए बिना त्वरित प्रोटोटाइपिंग, डीबगिंग के लिए एक इंटरैक्टिव शेल प्रदान करता है। कमांड प्रॉम्प्ट में jshell टाइप करके JShell आसानी

  1. - जावा 9 में JShell में क्लास और ऑब्जेक्ट कैसे बनाएं?

    JShell जावा 9 में जारी किया गया एक नया जावा शेल टूल है। यह पहला आधिकारिक REPL (रीड-इवैल्यूएट-प्रिंट-लूप) एप्लिकेशन है। यह टूल सरल जावा प्रोग्राम और लॉजिक जैसे स्टेटमेंट्स, लूप्स, एक्सप्रेशन आदि को एक्जीक्यूट और इवैल्यूएट करने में मदद करता है। जावा REPL कमांड प्रॉम्प्ट में एक सरल प्रोग्रामिंग वातावरण