Java Academy · पाठ

EnumSet

Enums पर तेज़ set संक्रियाएँ

पाठ 3, कुल 4 में से13 चरण

EnumSet, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

EnumSet क्या है?

EnumSet केवल एनम प्रकारों के लिए बनाया गया विशेषीकृत Set कार्यान्वयन है।

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

import java.util.EnumSet;
import java.util.Set;

public class Main {
    enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
    public static void main(String[] args) {
        Set<Day> weekend = EnumSet.of(Day.SAT, Day.SUN);
        System.out.println(weekend);
    }
}

of से बनाना

फ़ैक्टरी EnumSet.of(...) सूचीबद्ध स्थिरांकों से एक सेट बनाती है। एक से पाँच तत्वों के लिए अलग-अलग ओवरलोड और उसके अलावा varargs संस्करण उपलब्ध है।

import java.util.EnumSet;

public class Main {
    enum Perm { READ, WRITE, EXECUTE }
    public static void main(String[] args) {
        EnumSet<Perm> perms = EnumSet.of(Perm.READ, Perm.WRITE);
        System.out.println(perms);
    }
}

allOf और noneOf

दो और फ़ैक्टरियाँ:

  • allOf(Type.class) हर स्थिरांक वाला सेट बनाती है।
  • noneOf(Type.class) भरने के लिए तैयार एक खाली सेट बनाती है।
import java.util.EnumSet;

public class Main {
    enum Color { RED, GREEN, BLUE }
    public static void main(String[] args) {
        EnumSet<Color> all = EnumSet.allOf(Color.class);
        EnumSet<Color> none = EnumSet.noneOf(Color.class);
        none.add(Color.RED);
        System.out.println("all: " + all);
        System.out.println("built: " + none);
    }
}

सन्निहित स्थिरांकों के लिए range

EnumSet.range(from, to) दो अंतिम बिंदुओं के बीच के सभी स्थिरांक, दोनों सहित, घोषणा क्रम में शामिल करता है।

import java.util.EnumSet;

public class Main {
    enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
    public static void main(String[] args) {
        EnumSet<Day> workdays = EnumSet.range(Day.MON, Day.FRI);
        System.out.println(workdays);
    }
}

complementOf

EnumSet.complementOf(set) दिए गए सेट में नहीं मौजूद सभी स्थिरांकों का सेट लौटाता है।

किसी चयन को उलटने का यह तेज़ तरीका है।

import java.util.EnumSet;

public class Main {
    enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
    public static void main(String[] args) {
        EnumSet<Day> work = EnumSet.range(Day.MON, Day.FRI);
        EnumSet<Day> rest = EnumSet.complementOf(work);
        System.out.println(rest);
    }
}

सेट ऑपरेशन

क्योंकि EnumSet एक वास्तविक सेट है, इसलिए addAll, retainAll और removeAll के माध्यम से आपको यूनियन, इंटरसेक्शन और अंतर मिलते हैं।

आंतरिक रूप से ये बिट-स्तरीय ऑपरेशन के रूप में बहुत तेज़ी से चलते हैं।

import java.util.EnumSet;

public class Main {
    enum Tag { A, B, C, D }
    public static void main(String[] args) {
        EnumSet<Tag> x = EnumSet.of(Tag.A, Tag.B, Tag.C);
        EnumSet<Tag> y = EnumSet.of(Tag.B, Tag.C, Tag.D);
        EnumSet<Tag> inter = EnumSet.copyOf(x);
        inter.retainAll(y);
        System.out.println("intersection: " + inter);
    }
}

सदस्यता जाँच

contains केवल एक बिट की जाँच करता है, इसलिए इसका समय स्थिर रहता है और यह बहुत तेज़ है।

import java.util.EnumSet;

public class Main {
    enum Feature { DARK_MODE, BETA, ANALYTICS }
    public static void main(String[] args) {
        EnumSet<Feature> enabled = EnumSet.of(Feature.DARK_MODE, Feature.BETA);
        System.out.println(enabled.contains(Feature.BETA));
        System.out.println(enabled.contains(Feature.ANALYTICS));
    }
}

फ़्लैग के विकल्प के रूप में EnumSet

EnumSet से पहले प्रोग्रामर int बिट फ़्लैग जैसे READ | WRITE इस्तेमाल करते थे। EnumSet उनकी जगह प्रकार-सुरक्षा और बेहतर पठनीयता देता है।

आपको बिट फ़ील्ड का प्रदर्शन मिलता है, लेकिन मैन्युअल मास्किंग से होने वाली त्रुटियों के बिना।

import java.util.EnumSet;
import java.util.Set;

public class Main {
    enum Style { BOLD, ITALIC, UNDERLINE }
    static void render(Set<Style> styles) {
        System.out.println("Applying: " + styles);
    }
    public static void main(String[] args) {
        render(EnumSet.of(Style.BOLD, Style.UNDERLINE));
    }
}

घोषणा क्रम में पुनरावृत्ति

EnumSet स्थिरांकों के स्वाभाविक क्रम में पुनरावृत्त होता है, जो उनका घोषणा क्रम होता है।

इससे HashSet के विपरीत पुनरावृत्ति का क्रम पूर्वानुमेय और स्थिर रहता है।

import java.util.EnumSet;

public class Main {
    enum Phase { ALPHA, BETA, RC, GA }
    public static void main(String[] args) {
        EnumSet<Phase> set = EnumSet.of(Phase.GA, Phase.ALPHA, Phase.RC);
        for (Phase p : set) System.out.println(p);
    }
}

copyOf से सुरक्षित प्रतियाँ

EnumSet.copyOf(collection) किसी भी एनम मानों के संग्रह से EnumSet बनाता है। सुरक्षित प्रति बनाने या List में बदलने के लिए इसका उपयोग करें।

import java.util.EnumSet;
import java.util.List;

public class Main {
    enum Role { ADMIN, EDITOR, VIEWER }
    public static void main(String[] args) {
        List<Role> source = List.of(Role.EDITOR, Role.VIEWER);
        EnumSet<Role> roles = EnumSet.copyOf(source);
        System.out.println(roles);
    }
}

यह तेज़ क्यों है

64 या उससे कम स्थिरांक वाले एनम के लिए EnumSet बिट वेक्टर के रूप में एक long का उपयोग करता है। हर ऑपरेशन एक या दो मशीन निर्देशों में पूरा हो जाता है।

एनम सेट के लिए हमेशा HashSet<MyEnum> के बजाय EnumSet को प्राथमिकता दें।

import java.util.EnumSet;

public class Main {
    enum Bit { B0, B1, B2, B3 }
    public static void main(String[] args) {
        EnumSet<Bit> s = EnumSet.of(Bit.B0, Bit.B2);
        // contains is a single bit-and under the hood
        System.out.println(s.contains(Bit.B2));
    }
}

त्वरित जाँच

EnumSet के बारे में अपना ज्ञान जाँचें।

पुनरावलोकन

आपने EnumSet सीखा:

  • एनम के लिए बिट-वेक्टर वाला Set, जो बहुत तेज़ और संक्षिप्त है।
  • फ़ैक्टरियाँ: of, allOf, noneOf, range, complementOf, copyOf।
  • यह घोषणा क्रम में पुनरावृत्त होता है।
  • यह int बिट फ़्लैग का प्रकार-सुरक्षित विकल्प है।

अगला विषय है इससे मिलता-जुलता मैप प्रकार: EnumMap।

import java.util.EnumSet;

public class Main {
    enum X { A, B }
    public static void main(String[] args) {
        System.out.println("EnumSet recap: " + EnumSet.allOf(X.class));
    }
}
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “EnumSet” पाठ निःशुल्क है?

हाँ—“EnumSet” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“EnumSet” में मैं क्या सीखूँगा?

Enums पर तेज़ set संक्रियाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“EnumSet” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Fields और Methods वाले Enums
  2. Enums में Abstract Methods
  3. EnumSet
  4. EnumMap
← Java Academy पर वापस जाएँ