مجموعات Java: الأدوات الخفية التي تفوتك

يستخدم معظم المطورين مجموعات Java بنفس الطريقة كل يوم؛ حيث يستخدمون ArrayLists و HashSets. ولكن قد تفوتك أدوات تجعل الكود الخاص بك أسرع وأكثر أماناً.

إليك ثلاث أدوات محددة لتحسين الكود الخاص بك.

  1. Arrays.asList ليست قائمة (List) حقيقية

عندما تستخدم Arrays.asList(array)، فإنك تحصل على قائمة ذات حجم ثابت. وهي ترتبط مباشرة بالمصفوفة (array) الأصلية الخاصة بك.

  • إذا قمت بتغيير المصفوفة، ستتغير القائمة.
  • إذا حاولت إضافة عناصر أو إزالتها، سيتعطل الكود الخاص بك مع ظهور خطأ.

لإصلاح ذلك، قم بتغليفها في ArrayList جديدة: List<String> list = new ArrayList<>(Arrays.asList(array));

هذا ينشئ قائمة حقيقية ومستقلة يمكنك تعديلها.

  1. استخدم EnumSet من أجل الأداء

هل تقوم بتخزين الـ enums في HashSet؟ هذا يتسبب في عبء إضافي (overhead) غير ضروري. تستخدم HashSets جداول التجزئة (hash tables) ورؤوس الكائنات (object headers).

استخدم EnumSet بدلاً من ذلك. فهي تستخدم ناقل بتات (bit vector) داخلياً، وهي سريعة للغاية ولا تستهلك تقريباً أي ذاكرة. إنها مثالية للأنظمة القائمة على الأعلام (flags) مثل قدرات اللاعبين أو الإعدادات.

  • إنها آمنة النوع (type-safe).
  • هي أسرع بكثير من HashSet.
  • وهي تعالج العمليات على مستوى البت (bitwise operations) نيابة عنك.
  1. استخدم ConcurrentHashMap.computeIfAbsent من أجل التخزين المؤقت (caches)

إذا كنت تقوم ببناء ذاكرة تخزين مؤقت (cache)، فغالباً ما تكتب كوداً معقداً لمنع الخيوط (threads) المتعددة من حساب نفس القيمة. يُعرف هذا باسم "القفل مزدوج التحقق" (double-checked locking)، وهو صعب القراءة وسهل الكسر.

بدلاً من ذلك، استخدم سطراً واحداً: cache.computeIfAbsent(key, this::expensiveCalculation);

هذه الطريقة ذرية (atomic)؛ فهي تضمن تشغيل العملية الحسابية مرة واحدة فقط، حتى لو طلبت خيوط (threads) كثيرة نفس المفتاح (key) في نفس الوقت. هذا يقلل من الأخطاء ويجعل هدفك واضحاً.

لماذا تهم هذه الأدوات:

  • أداء يمكن التنبؤ به: تتجنب تكاليف الذاكرة الخفية.
  • أخطاء أقل: تتوقف عن مواجهة حالات التسابق (race conditions) في الكود متعدد الخيوط (multi-threaded).
  • كود أكثر وضوحاً: سيفهم المطورون الآخرون تصميمك على الفور.

توقف عن محاربة الإطار البرمجي (framework). ابدأ في استخدامه لكتابة كود أكثر رشاقة وأماناً.

المصدر: https://dev.to/timevolt/java-collections-the-hidden-relics-most-developers-miss-and-why-theyre-game-changers-4ehd