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

JShell में Java 9: Set इंटरफेस कार्यान्वयन - HashSet, LinkedHashSet, TreeSet

JShell Java 9 का इंटरैक्टिव REPL टूल है जो Set इंटरफेस और इसके कार्यान्वयन का त्वरित परीक्षण करने के लिए उत्कृष्ट है। एक Set अद्वितीय तत्वों का संग्रह है - कोई डुप्लिकेट नहीं।

Set कार्यान्वयन तुलना

कार्यान्वयनक्रमनल अनुमतप्रदर्शनउपयोग केस
HashSetकोई गारंटी नहींहां (1)O(1) सर्वोत्तमसामान्य उद्देश्य, तेज़ लुकअप
LinkedHashSetसम्मिलन क्रमहां (1)O(1) + ओवरहेडक्रम मायने रखता है, डुप्लिकेट नहीं
TreeSetसॉर्टेड (प्राकृतिक/Comparator)नहींO(log n)सॉर्टेड सेट, रेंज ऑपरेशन
Set.of()अनिर्दिष्टनहींO(1)अपरिवर्तनीय, छोटे निश्चित सेट

JShell सत्र: Set.of() - अपरिवर्तनीय सेट (Java 9+)

jshell> Set set = Set.of("Adithya", "Chaitanya", "Jai")
set ==> [Jai, Adithya, Chaitanya]

jshell> set.add("Adithya")
|  Exception java.lang.UnsupportedOperationException
|        at ImmutableCollections.uoe (ImmutableCollections.java:71)
|        at ImmutableCollections$AbstractImmutableCollection.add (ImmutableCollections.java:73)
|        at (#5:1)

// परिवर्तनीय HashSet में बदलें
jshell> Set hashSet = new HashSet<>(set)
hashSet ==> [Chaitanya, Jai, Adithya]

jshell> hashSet.add("Adithya")  // डुप्लिकेट
$8 ==> false

jshell> hashSet
hashSet ==> [Chaitanya, Jai, Adithya]  // अपरिवर्तित

JShell सत्र: HashSet

विशेषता: न सम्मिलन क्रम, न सॉर्टेड क्रम।

jshell> Set numbers = new HashSet<>()
numbers ==> []

jshell> numbers.add(12345)
$11 ==> true

jshell> numbers.add(1234)
$12 ==> true

jshell> numbers.add(123)
$13 ==> true

jshell> numbers.add(12)
$14 ==> true

jshell> numbers
numbers ==> [1234, 12345, 123, 12]  // क्रम अनियमित

JShell सत्र: LinkedHashSet

विशेषता: सम्मिलन क्रम बनाए रखता है।

jshell> Set numbers1 = new LinkedHashSet<>()
numbers1 ==> []

jshell> numbers1.add(12345)
$17 ==> true

jshell> numbers1.add(1234)
$18 ==> true

jshell> numbers1.add(123)
$19 ==> true

jshell> numbers1.add(12)
$20 ==> true

jshell> numbers1
numbers1 ==> [12345, 1234, 123, 12]  // सम्मिलन क्रम!

jshell> numbers1.add(123456)
$22 ==> true

jshell> numbers1
numbers1 ==> [12345, 1234, 123, 12, 123456]  // अंत में जोड़ा गया

JShell सत्र: TreeSet

विशेषता: प्राकृतिक क्रम में सॉर्टेड (Integer के लिए आरोही)।

jshell> Set numbers2 = new TreeSet<>()
numbers2 ==> []

jshell> numbers2.add(12345)
$25 ==> true

jshell> numbers2.add(1234)
$26 ==> true

jshell> numbers2.add(123)
$27 ==> true

jshell> numbers2.add(12)
$28 ==> true

jshell> numbers2
numbers2 ==> [12, 123, 1234, 12345]  // सॉर्टेड!

jshell> numbers2.add(123456)
$30 ==> true

jshell> numbers2
numbers2 ==> [12, 123, 1234, 12345, 123456]  // सॉर्टेड क्रम बनाए रखा

उन्नत JShell प्रयोग

कस्टम ऑब्जेक्ट्स के साथ TreeSet (Comparator)

jshell> record Person(String name, int age) {}

jshell> TreeSet byAge = new TreeSet<>(Comparator.comparing(Person::age))
byAge ==> []

jshell> byAge.add(new Person("Alice", 30))
$2 ==> true

jshell> byAge.add(new Person("Bob", 25))
$3 ==> true

jshell> byAge.add(new Person("Charlie", 35))
$4 ==> true

jshell> byAge
byAge ==> [Person[name=Bob, age=25], Person[name=Alice, age=30], Person[name=Charlie, age=35]]

Set ऑपरेशन

jshell> Set setA = Set.of(1, 2, 3, 4, 5)
setA ==> [1, 2, 3, 4, 5]

jshell> Set setB = Set.of(4, 5, 6, 7, 8)
setB ==> [4, 5, 6, 7, 8]

jshell> // यूनियन
jshell> Set union = new HashSet<>(setA); union.addAll(setB)
union ==> [1, 2, 3, 4, 5, 6, 7, 8]

jshell> // इंटरसेक्शन
jshell> Set intersection = new HashSet<>(setA); intersection.retainAll(setB)
intersection ==> [4, 5]

jshell> // डिफरेंस
jshell> Set difference = new HashSet<>(setA); difference.removeAll(setB)
difference ==> [1, 2, 3]

jshell> // सबसेट जांच
jshell> Set.of(1, 2).containsAll(Set.of(1, 2))
$10 ==> true

Java 9+ फैक्टरी मेथड्स

jshell> // अपरिवर्तनीय सेट (Java 9+)
jshell> Set.of(1, 2, 3)
$1 ==> [1, 2, 3]

jshell> Set.of()  // खाली
$2 ==> []

jshell> // 10+ तत्वों के लिए varargs ओवरलोड
jshell> Set.of(1,2,3,4,5,6,7,8,9,10,11)
$3 ==> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

jsell> // कॉपी के लिए अपरिवर्तनीय नहीं
jshell> Set.copyOf(Arrays.asList(1,2,2,3))  // डुप्लिकेट हटाता है
$4 ==> [1, 2, 3]

प्रदर्शन विशेषताएं

ऑपरेशनHashSetLinkedHashSetTreeSet
add()O(1)O(1)O(log n)
contains()O(1)O(1)O(log n)
remove()O(1)O(1)O(log n)
iterationअनियमितसम्मिलन क्रमसॉर्टेड
मेमोरीकममध्यम (लिंक्ड लिस्ट) उच्च (ट्री नोड्स)

सामान्य नुकसान

  • Set.of() अपरिवर्तनीय है: add/remove/clear पर UnsupportedOperationException फेंकता है
  • TreeSet नल की अनुमति नहीं देता: NullPointerException फेंकता है
  • परिवर्तनीय ऑब्जेक्ट्स: यदि सेट में ऑब्जेक्ट बदलते हैं तो equals/hashCode टूट जाता है
  • समवर्ती संशोधन: पुनरावृति के दौरान संशोधन से ConcurrentModificationException
  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 में, मैन्युअल रूप से एक्सेप्शन पकड़ने की आवश्यकता नहीं है। JShell स्वचालित रूप से प्रत्येक एक्सेप्शन को पकड़ता है और उसके

  1. - Java में एनोनिमस इनर क्लास का उपयोग करके इंटरफेस कैसे इम्प्लीमेंट करें?

    एक एनोनिमस इनर क्लास एक ऐसी क्लास है जिसका कोई नाम नहीं होता, हम इसे सीधे इंस्टेंशिएशन लाइन पर परिभाषित करते हैं। उदाहरण निम्न प्रोग्राम में, हम TutorialsPoint इंटरफेस के toString() मेथड को एनोनिमस इनर क्लास का उपयोग करके इम्प्लीमेंट कर रहे हैं, और इसके रिटर्न मान को प्रिंट कर रहे हैं। interface