سؤال

كنت أبحث عن ثنائية الاتجاه خريطة التنفيذ في جاوة ، عثر عليها في هاتين المكتبتين:

كلاهما مجانا ، ثنائي الاتجاه تنفيذ خريطة أنني كنت أبحث عن (BidiMap في أباتشي ، BiMap في جوجل) ، مثير للدهشة ما يقرب من نفس الحجم (أباتشي 493 kB, جوجل 499 kB) [ed.:لم يعد صحيحا!] ويبدو في جميع طرق مشابهة جدا بالنسبة لي.

أي واحد يجب أن تختار و لماذا ؟ هناك بعض يعادل البدائل (يجب أن يكون لديك على الأقل ثنائي الاتجاه خريطة)?أنا أعمل مع أحدث Java SE, لذلك لا تحتاج إلى مصطنع حد جافا 5 أو أي شيء مثل ذلك.

هل كانت مفيدة؟

المحلول

في رأيي الخيار الأفضل هو الجوافة (المعروفة سابقًا باسم مجموعات Google):

  • إنه أكثر حداثة (يحتوي على أدوية عامة)
  • فهو يتبع تمامًا متطلبات واجهة برمجة التطبيقات للمجموعات
  • يتم صيانته بنشاط
  • CacheBuilder وهو سابق MapMaker هي مجرد رهيبة

تعد Apache Commons Collections مكتبة جيدة أيضًا، ولكنها فشلت منذ فترة طويلة في توفير إصدار ممكّن للأدوية العامة (وهو إصدار رئيسي عيب واجهة برمجة تطبيقات المجموعات في رأيي) ويبدو عمومًا أنه في وضع الصيانة/عدم القيام بالكثير من العمل عليه في الآونة الأخيرة، اكتسبت مجموعات كومنز بعض القوة مرة أخرى، ولكن لا يزال يتعين عليها اللحاق بالركب..

إذا كان حجم التنزيل/بصمة الذاكرة/حجم الكود يمثل مشكلة، فقد تكون Apache Commons Collections مرشحًا أفضل، نظرًا لأنها تبعية شائعة للمكتبات الأخرى.لذلك من الممكن أن يتم استخدامه في التعليمات البرمجية الخاصة بك أيضًا دون إضافة أي تبعيات إضافية.يحرر:لقد تم تقويض هذه "الميزة" الخاصة جزئيًا الآن، نظرًا لأن العديد من المكتبات الجديدة تعتمد فعليًا على الجوافة و لا على مجموعات أباتشي كومنز.

نصائح أخرى

أهم الأشياء التي وجدتها والتي تجعل مجموعات Google هي المكان المناسب للبدء:

  • الأدوية العامة (المجموعات التي لا تحتوي على الأدوية العامة - FTL)
  • الاتساق مع إطار عمل المجموعات (كان جوش بلوخ لاعباً رئيسياً في هذا الإطار)
  • صحة.هؤلاء الرجال مرتبطون بشدة بحل هذه المشكلة بشكل صحيح؛لديهم ما يقرب من 25 ألف وحدة من الاختبارات، ويرتبطون بالحصول على واجهة برمجة التطبيقات (API) بشكل صحيح.

هنا شيء عظيم فيديو يوتيوب من محاضرة ألقاها المؤلف الرئيسي وقام بعمل جيد في مناقشة ما يستحق معرفته حول هذه المكتبة.

من التعليمات:جوجل مجموعات التعليمات

لماذا جوجل بناء كل هذا, عندما يمكن أن حاولت تحسين أباتشي العموم مجموعات بدلا من ذلك ؟

أباتشي العموم مجموعات واضح جدا لا تلبي احتياجاتنا.ذلك لا تستخدم الأدوية التي هي مشكلة بالنسبة لنا نحن نكره للحصول على تجميع تحذيرات من التعليمات البرمجية.كما تم في "عقد نمط" لفترة طويلة.يمكننا أن نرى أن ذلك يتطلب جميلة الاستثمار الكبرى من الولايات المتحدة إلى إصلاحه حتى كنا سعداء لاستخدامه ، و في هذه الأثناء ، مكتبتنا الخاصة بالفعل نموا عضويا.

فارق هام بين أباتشي مكتبة ولنا أن لدينا مجموعات بإخلاص تلتزم العقود المحددة من قبل جدك واجهات تنفيذها.إذا قمت بمراجعة أباتشي وثائق, سوف تجد عدد لا يحصى من الأمثلة على الانتهاكات.أنها الفضل تشير هذه بوضوح, ولكن لا يزال, الانحراف من مستوى تحصيل سلوك محفوف بالمخاطر!يجب أن تكون حذرا ما كنت تفعل مع هذه المجموعة ؛ البق هي دائما فقط في انتظار ان يحدث.

لدينا مجموعات كاملة generified و لم تنتهك عقودهم (مع عزل الاستثناءات ، حيث JDK تطبيقات لدينا مجموعة قوية سابقة مقبولة انتهاكات).هذا يعني أنك يمكن أن تمر من مجموعاتنا إلى أي الطريقة التي تتوقع مجموعة ويشعر واثقا من أن الأمور سوف تعمل بالضبط كما ينبغي.

شيئين آخرين (آمل أن لا أكون مخطئا)

  • ترخيص Guava (الاسم الجديد لمجموعات جوجل) هو Apache License 2.0، ويعني:نفس الشيء بالنسبة لمشروع Apache Commons
  • لا يمكنني العثور على الكود المصدري لـ Guava في ملف لتنزيله (يبدو أنه لا يمكن الوصول إلا إلى git)

أحد الأشياء السيئة في Guava هو أن Multimap لا يمتد إلى java.util.Map.إذا كانت لديك أساليبك الخاصة التي تعمل على الخرائط، فلن تعمل على Guava Multimaps (تعمل واجهة Apache MultiMap على توسيع java.util.Map).أنا متأكد من أن هناك سببًا وجيهًا وراء كون الأمر على ما هو عليه ولكنه غير مريح أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top