ArrayList بسطر واحد في Java: من المبتدئ إلى المحترف
تخيل: أنت تكتب اختبارًا، أو تنشئ نموذجًا أوليًا، أو تريد ببساطة تعيين قائمة من السلاسل النصية بسرعة. في Python يبدو الأمر كالتالي my_list = ["a", "b", "c"]. في Java... يبدأ الصداع. هل يجب عليك في كل مرة كتابة ثلاثة أو أربعة أسطر، واستدعاء add() لكل عنصر؟ مفاجأة: لا. في هذه المقالة، سنستعرض جميع طرق تهيئة ArrayList في سطر واحد، ونجيب على الأسئلة الأكثر شيوعًا من Stack Overflow، ونوضح الطريقة التي يجب اختيارها حسب المهمة. هيا بنا!
هذه المادة مبنية على سؤال شائع حقيقي من Stack Overflow حصل على آلاف المشاهدات. قمنا بتكييفه للتعليم، بحيث لا تقوم فقط بنسخ الكود، بل تفهم لماذا يعمل (أو لا يعمل).
لماذا التهيئة البسيطة تمثل ألمًا؟
في Java، يوجد ArrayList وهو مصفوفة ديناميكية. لكن ليس لديه حرفية مدمجة للإنشاء بالبيانات، كما هو الحال مع المصفوفات (String[] arr = {"a", "b", "c"};). لذلك، غالبًا ما يكتب المبتدئون هكذا:
ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("Python");list.add("JavaScript");هذا يعمل، لكنه يأخذ 4 أسطر. ماذا لو كان لديك 10 عناصر؟ 100؟ تريد أن يكون أكثر إحكامًا. دعنا نستعرض جميع الطرق القانونية وغير القانونية لفعل ذلك في سطر واحد.
الطريقة 1: الكلاسيكية — Arrays.asList()
الطريقة الأكثر شيوعًا التي ستجدها في إجابات Stack Overflow:
ArrayList<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));هنا، نقوم أولاً بإنشاء قائمة ذات حجم ثابت باستخدام Arrays.asList()، ثم نمررها إلى مُنشئ ArrayList. النتيجة هي قائمة كاملة قابلة للتعديل. يمكنك إضافة وحذف وتعديل العناصر.
هام: Arrays.asList() في حد ذاته لا يُرجع ArrayList! إنه يُرجع تطبيقه الداخلي لقائمة ذات حجم ثابت. إذا حاولت استدعاء add() على نتيجة Arrays.asList()، فستحصل على UnsupportedOperationException. تذكر هذا - هذا هو السؤال الأكثر شيوعًا في المقابلات وفي مواضيع Stack Overflow.
متى تستخدمها؟
- عندما تحتاج إلى قائمة قابلة للتعديل.
- عندما تعمل مع Java 7 أو أقل (قبل Java 9).
الطريقة 2: Java 9+ — List.of()
بدءًا من Java 9، ظهرت طريقة المصنع List.of():
List<String> immutableList = List.of("a", "b", "c");قصيرة، جميلة، موجزة. لكن هناك فارق بسيط: القائمة الناتجة غير قابلة للتعديل (immutable). لن تتمكن من إضافة أو حذف عنصر. إذا حاولت، فستحصل على UnsupportedOperationException.
إذا كنت بحاجة إلى ArrayList بالتحديد، قم بتغليفها:
ArrayList<String> list = new ArrayList<>(List.of("a", "b", "c"));هذه الطريقة أفضل من Arrays.asList() إذا كنت تستخدم Java 9 أو أعلى، لأن List.of() تُرجع قائمة غير قابلة للتعديل هيكليًا (لا يمكن تغيير الحجم)، على عكس Arrays.asList() التي تسمح بتعديل العناصر عبر set().
متى تستخدمها؟
- Java 9+
- تحتاج إلى بناء جملة قصير
- لا تخطط لتعديل القائمة (أو تقوم بتغليفها في
ArrayList)
الطريقة 3: التهيئة المزدوجة (Double Brace) — نمط مضاد
غالبًا ما تظهر هذه الحيلة في Stack Overflow. تبدو هكذا:
ArrayList<String> list = new ArrayList<>() {{ add("a"); add("b"); add("c");}};ماذا يحدث هنا؟ نقوم بإنشاء فئة داخلية مجهولة ترث من ArrayList.