التعداد
Enumset هي حاوية عامة من نوع التعداد Java. نظرًا لأن Java قد تمت فرزها و Treeset و Hashset والحاويات الأخرى ، فلماذا تحتاج إلى تعداد إضافي <T>؟ الجواب هو أن التعداد له خصائص معينة. على سبيل المثال ، تعداد سريع للغاية. لن أدرج ميزات أخرى واحدة تلو الأخرى ، بعد كل شيء ، لا يقدم محتوى هذه المقالة ميزات التعداد.
فصول التجميع المصممة خصيصًا لفئات التعداد ، يجب أن تكون جميع العناصر هي أنواع التعداد
يتم طلب العناصر المحددة من التعداد ويتم تخزينها داخليًا بواسطة ناقلات بت ، بحيث تشغل ذاكرة أقل ولها كفاءة عالية.
العناصر الفارغة غير مسموح بها
رمز المصدر
Package Java.Util ؛ Import Sun.Misc.SharedSecrets ؛ public class class enumset <e يمتد التعداد <e >> يمتد مجردة <e> الأدوات clonable ، java.io.serializable { / *** type element* / final class <e> elementType ؛ / *** تخزين عناصر من خلال Array*/ Final enum [] Universe ؛ التعداد الثابت الخاص [] Zero_length_enum_array = new enum [0] ؛ enumset (class <e> elementType ، enum [] Universe) {this.elementType = elementType ؛ this.universe = الكون ؛ }/** * قم بإنشاء مجموعة تعداد فارغة وصياغة نوع العنصر الخاص به * param elementType كائن الفئة من نوع العنصر لهذا التعداد * set * throws nullpointerexception if <tt> elementType </tt> expare */public static <e extative enum <e> getUniverse (elementType) ؛ إذا (الكون == فارغ) رمي clascastException جديد (elementType + "وليس التعداد") ؛ if (Universe.Length <= 64) إرجاع New Contractorumset <> (ElementType ، الكون) ؛ مرة أخرى إرجاع jumboenumset الجديد <> (elementType ، الكون) ؛ }/** * قم بإنشاء تعداد يحتوي على جميع العناصر في مجموعة نوع العناصر المحددة * * param elementType كائن الفئة من نوع العنصر لهذا التعداد * set * throws nullpointexception if <tt> elementType </tt> is null */public static <e extens <e> enumset <e> noneof (elementType) ؛ النتيجة. addall () ؛ نتيجة العودة } /** * يضيف جميع العناصر من نوع التعداد المناسب إلى مجموعة التعداد * ، والتي تكون فارغة قبل المكالمة. */ مجردة void addall () ؛ /** * قم بإنشاء مجموعة تعداد مع نفس نوع العنصر مثل مجموعة التعداد المحددة * * param s مجموعة التعداد التي تهيئ منها مجموعة التعداد هذه * throws nullpointerexception if <tt> s </tt> هي null */public static <e يمتد enum <e> }/** * قم بإنشاء مجموعة تعداد يمكن من خلالها تهيئة مجموعة التعداد هذه * throws alfortalargumentException إذا كان <tt> c </tt> ليس * <tt> مثيل enumset </tt> ولا يحتوي على أي عناصر * atting <e> exting <e> exting <e c) {if (c eastyof enumset) {return ((enumset <e>) c) .clone () ؛ } آخر {if ( iterator <e> i = c.iterator () ؛ e أولاً = i.next () ؛ enumset <e> result = enumset.of (أولاً) ؛ بينما (i.hasnext ()) result.add (i.next ()) ؛ نتيجة العودة }}/** * قم بإنشاء مجموعة من التعداد من مكملها لتهيئة مجموعة التعداد هذه * throws nullpointerxception إذا كان <tt> s </tt> فارغًا */ثابتًا عامًا <e يمتد enum <e >> enumset <e> complementof (enumset <e> s) النتيجة. نتيجة العودة }/** * 1 مجموعة تعداد العناصر * * param e العنصر الذي يجب أن يحتويه هذه المجموعة في البداية * throws nullpointerxception إذا كان <tt> e </tt> فارغًا * @RETURN مجموعة تعداد في البداية تحتوي على العنصر المحدد */ثابت <e noneof (e.getDeclaringclass ()) ؛ النتيجة. add (e) ؛ نتيجة العودة } / ** * 2 مجموعة تعداد العناصر * * param e1 عنصر يحتوي هذه المجموعة في البداية * @param e2 عنصر آخر يمكن أن تحتوي عليه هذه المجموعة في البداية * throws nullpointerexception إذا كانت أي معلمات فارغة * regurn en enturn التي تحتوي في البداية على العناصر المحددة * / static setends <e enum <e> enumset <e> result = noneof (e1.getDeclaringClass ()) ؛ النتيجة. add (e1) ؛ النتيجة. add (e2) ؛ نتيجة العودة } / ** * 3 * 3 مجموعة تعداد العناصر * * param e1 عنصر يحتوي هذه المجموعة في البداية * @param e2 عنصر آخر يتمتع به هذه المجموعة في البداية * param e3 عنصر آخر يمكن أن تحتوي هذه المجموعة على مبدئي * @throws nullpoenterexception إذا كانت أي معلمات غير خار of (e e1 ، e e2 ، e e3) {enumset <e> result = noneof (e1.getDeclaringClass ()) ؛ النتيجة. add (e1) ؛ النتيجة. add (e2) ؛ النتيجة. add (e3) ؛ نتيجة العودة } / ** * * 4 مجموعة تعداد العناصر * param e1 عنصر يحمله هذه المجموعة في البداية * param e2 عنصر آخر يتمتع به هذه المجموعة في البداية * param e3 عنصر آخر يمكن أن تحتوي هذه المجموعة في البداية * @param e4 عنصر آخر على reguent stisting * thin election <e يمتد enum <e >> enumset <e> من (e e1 ، e e2 ، e e3 ، e e4) {enumset <e> result = noneof (e1.getDeclaringClass ()) ؛ النتيجة. add (e1) ؛ النتيجة. add (e2) ؛ النتيجة. add (e3) ؛ النتيجة. add (e4) ؛ نتيجة العودة } /** * 5 * 5 مجموعة تعداد العناصر * * param e1 عنصر يحتوي هذه المجموعة في البداية * param e2 عنصر آخر يتم احتوائها في البداية * param e3 عنصر آخر على هذا المجموعة هو أن تحتوي على مبدئي * @param e4 عنصر آخر هو أن تحتوي هذه المجموعة في البداية * param e5 عنصر آخر على هذا المجموعة مجموعة التعداد التي تحتوي في البداية على العناصر المحددة */ ثابت عام <e يمتد التعداد <e >> enumset <e> من (e e1 ، e e2 ، e e3 ، e e4 ، e e5) {enumset <e> result = noneof (e1.getDeclaringClass ()) ؛ النتيجة. add (e1) ؛ النتيجة. add (e2) ؛ النتيجة. add (e3) ؛ النتيجة. add (e4) ؛ النتيجة. Add (E5) ؛ نتيجة العودة ستر enum <e >> enumset <e> من (e أولاً ، e ... rest) {enumset <e> result = noneof (firstDeClaringClass ()) ؛ النتيجة. add (أولاً) ؛ لـ (e e: rest) result.add (e) ؛ نتيجة العودة ) يمتد النطاق * المحدد بواسطة نقاط النهاية المحددة */ الثابتة العامة <E Extative enum <e >> enumset <e> range (e from ، e to) {if (from.compareto (to)> 0) رمي غير alualtalArgumentException (من + ">" + إلى) ؛ enumset <e> result = noneof (من .getDeclaringClass ()) ؛ النتيجة. addrange (من ، إلى) ؛ نتيجة العودة } /** * يضيف النطاق المحدد إلى مجموعة التعداد هذه ، وهو فارغ سابق * إلى المكالمة. */ Abstract void addrange (e from ، e to) ؛ /*** إرجاع نسخة من هذه المجموعة. * * return نسخة من هذه المجموعة */ enumset العامة <e> clone () {try {return (enumset <e>) super.clone () ؛ } catch (clonenotsupportedException e) {رمي تأكيد جديد (e) ؛ }} /*** يكمل محتويات مجموعة التعداد هذه. */ مجردة باطلة تكملة () ؛ /*** يلقي استثناء إذا لم يكن E من النوع الصحيح لمجموعة التعداد هذه. */ void final typeCheck (e e) {class eclass = e.getClass () ؛ if (eclass! = elementType && eclass.getSuperClass ()! = elementType) رمي classcastException (eclass + "! =" + elementType) ؛ } /** * إرجاع جميع القيم التي تضم E. * يتم فك النتيجة ، مخزنة مؤقتًا ، ومشاركتها من قبل جميع المتصلين. */ private static <e يمتد enum <e >> e [] getUniverse (class <e> elementType) {return sharedsecrets.getjavalangaccess () .getenumConstantsShared (elementType) ؛ } /** * يتم استخدام هذه الفئة لتسلسل جميع مثيلات التعداد ، بغض النظر عن * نوع التنفيذ. يلتقط "محتوياتهم المنطقية" ويتم إعادة بنائهم باستخدام المصانع الثابتة العامة. هذا ضروري * للتأكد من أن وجود نوع تنفيذ معين هو * تفاصيل التنفيذ. *. * * serial */ private final class <e> elementType ؛ /*** العناصر الواردة في مجموعة التعداد هذه. * * serial */ enum النهائي الخاص [] العناصر ؛ SerializationProxy (enumset <e> set) {elementType = set.elementType ؛ عناصر = set.toarray (Zero_length_enum_array) ؛ } كائن خاص readResolve () {enumset <e> result = enumset.noneof (elementType) ؛ لـ (enum e: elements) result.add ((e) e) ؛ نتيجة العودة } SerialVersionuid الطويل الثابت الخاص = 362491234563181265L ؛ } object writereplace () {return new SerializationProxy <> (this) ؛ }. }}لخص
ما سبق هو كل شيء عن قراءة رمز المصدر التجريدي Enumset ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!