में enum मानों की सूची क्या यह enum मानों के ArrayList (और इसे कुशल बनाना) बनाना संभव है? उदाहरण के लिए:जावा
enum MyEnum
{
ONE, TWO
}
MyEnum my = MyEnum.ONE;
List <?> al = new ArrayList <?>();
al.add(my);
al.remove(al.size()-1);
में enum मानों की सूची क्या यह enum मानों के ArrayList (और इसे कुशल बनाना) बनाना संभव है? उदाहरण के लिए:जावा
enum MyEnum
{
ONE, TWO
}
MyEnum my = MyEnum.ONE;
List <?> al = new ArrayList <?>();
al.add(my);
al.remove(al.size()-1);
हाँ, यह निश्चित रूप से संभव है, लेकिन आप
List<MyEnum> al = new ArrayList<MyEnum>();
फिर आप al
के तत्वों को जोड़ सकते हैं करना होगा: al.add(ONE)
या al.add(TWO)
।
जावा में एक enum सिर्फ एक और वर्ग है, यह संभव होना चाहिए। http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html
तो हाँ, यह काम करना चाहिए:
अधिक सही, एक enum वस्तु का एक उदाहरण है।
यह संभव है, लेकिन आप EnumSet
का उपयोग बजाय
enum MyEnum {
ONE, TWO;
public static final EnumSet<MyEnum> all = EnumSet.of(ONE, TWO);
}
आप बस लिख सकते हैं
new ArrayList<MyEnum>(Arrays.asList(MyEnum.values()));
कोई बताता है कि यह "चुना गया उत्तर" क्यों नहीं है? – Debriter
क्योंकि चुना गया उत्तर उतना अच्छा है जितना मुझे लगता है। –
यह एक अधिक सामान्य समाधान है, कि, किसी भी Enum वस्तु के लिए इस्तेमाल किया जा सकता तो मुक्त किया जाना चाहिए इस्तेमाल किया
static public List<Object> constFromEnumToList(Class enumType) {
List<Object> nueva = new ArrayList<Object>();
if (enumType.isEnum()) {
try {
Class<?> cls = Class.forName(enumType.getCanonicalName());
Object[] consts = cls.getEnumConstants();
nueva.addAll(Arrays.asList(consts));
} catch (ClassNotFoundException e) {
System.out.println("No se localizo la clase");
}
}
return nueva;
}
अब आप इस तरह से कॉल करना होगा:
constFromEnumToList(MiEnum.class);
यह अविश्वसनीय रूप से अधिक जटिल है और किसी भी प्रकार की सुरक्षा प्रदान नहीं करता है (जावा में 'enum' प्रकार जोड़ा गया था) का कारण नहीं है। – squid314
मुझे लगता है कि enum.values () आपके enums का संग्रह प्राप्त करने के लिए एक बहुत आसान तरीका है। –
The Answer (EnumSet
) अमित देशपांडे द्वारा और the Answer (.values
) मार्को Topolnik से दोनों सही हैं। यहां कुछ और जानकारी दी गई है।
.values()
विधि एक परोक्ष घोषित विधिEnum
पर, संकलक द्वारा जोड़ा है। यह Collection
की बजाय एक कच्चे सरणी का उत्पादन करता है। निश्चित रूप से प्रयोग योग्य।
प्रलेखन के बारे में विशेष ध्यान दें: असामान्य होने के नाते एक परोक्ष घोषित विधि के रूप में, .values()
विधि नहींEnum
वर्ग पर तरीकों की सूची में शामिल है। विधि defined in the Java Language Specification है, और Enum.valueOf
के लिए दस्तावेज़ में उल्लेख किया गया है।
EnumSet
को तेजी में शामिल हैं:
Enum सेट बिट वैक्टर के रूप में आंतरिक रूप से प्रतिनिधित्व कर रहे हैं:
वर्ग दस्तावेज़ के शब्दों में। यह प्रतिनिधित्व बेहद कॉम्पैक्ट और कुशल है। इस वर्ग का स्थान और समय प्रदर्शन पारंपरिक इंट-आधारित "बिट झंडे के लिए उच्च गुणवत्ता वाले, टाइपएफ़ विकल्प के रूप में उपयोग करने की अनुमति देने के लिए पर्याप्त होना चाहिए।"(जैसे containsAll और retainAll के रूप में) यहाँ तक कि थोक संचालन बहुत जल्दी चलाना चाहिए अगर उनके तर्क भी एक enum सेट है
इस enum को देखते हुए:।।
enum Animal
{
DOG , CAT , BIRD , BAT ;
}
एक पंक्ति में एक EnumSet
बनाओ
EnumSet<Animal> allAnimals = EnumSet.allOf(Animal.class);
डंप सांत्वना देने।
System.out.println("allAnimals : " + allAnimals);
allAnimals: [कुत्ते, बिल्ली, बर्ड, बैट]
enum वस्तुओं के उपसमूह से एक सेट करें। the class doc पर
EnumSet<Animal> flyingAnimals = EnumSet.of(BIRD , BAT);
देखो जोड़ने या तत्वों को निकाल लिया संग्रह हेरफेर करने के लिए कई तरह से देखने के लिए।
EnumSet<Animal> featheredFlyingAnimals =
EnumSet.copyOf(flyingAnimals).remove(BAT);
डॉक EnumSet के लिए इटरेटर का वादा किया प्राकृतिक व्यवस्था में है, जिस क्रम में enum के मूल्यों मूल रूप से घोषित किया गया।
इटरेटर इटरेटर विधि द्वारा वापस अपने प्राकृतिक क्रम (जिस क्रम में enum स्थिरांक घोषित कर रहे हैं) में तत्वों को पार करता:
वर्ग दस्तावेज़ के शब्दों में।
सचमुच, यह वादा दिया गया, मैं उलझन में हूं कि यह SortedSet
क्यों नहीं है। लेकिन, ओह ठीक है, काफी अच्छा है। यदि वांछित है तो हम Set
से List
बना सकते हैं। ArrayList
के निर्माता के लिए पास करें और उस संग्रह का Iterator
स्वचालित रूप से आपकी ओर से कॉल किया जाता है।
List<Animal> list = new ArrayList<>(allAnimals);
कंसोल पर डंप करें।
System.out.println("list : " + list);
रन करते समय।
list : [DOG, CAT, BIRD, BAT]
इस उत्तर में महान अंतर्दृष्टि! – Alfabravo
यह मेरे लिए एक खाली सूची देता है। –
@ बेसिलबर्क यह प्रश्न की व्याख्या पर निर्भर करता है। मैंने एक स्पष्ट संपादन किया। – arshajii