تحويل مصفوفة إلى قائمة في Java: من مبتدئ إلى محترف في 10 دقائق
\n\nهل سبق لك أن كتبت كودًا يعمل بشكل مثالي مع مصفوفة، ثم فجأة احتجت إلى قائمة؟ أو الأسوأ من ذلك، هل تلقيت استثناءً غامضًا عند محاولة إضافة عنصر إلى قائمة تم إنشاؤها من مصفوفة؟ إذا كان الأمر كذلك، فأنت في المكان الصحيح.
\n\nتحويل array to list في Java هي إحدى تلك المهام التي تبدو بسيطة، ولكنها تخفي العديد من المفاجآت. على Stack Overflow، جمع هذا السؤال مئات الآلاف من المشاهدات، وليس من دون سبب: خلف البساطة الظاهرة تكمن تفاصيل مهمة حول العمل مع المجموعات.
\n\nفي هذه المقالة، سنستعرض جميع الطرق القانونية لتحويل مصفوفة إلى قائمة في Java، ونتعلم كيفية تجنب الأخطاء النموذجية، ونكتشف أي طريقة تختار في موقف معين. هيا بنا!
\n\nلماذا Arrays.asList() مجرد فخ؟
\n\nالطريقة الأكثر شيوعًا لتحويل مصفوفة إلى قائمة في Java هي طريقة Arrays.asList(). تبدو بسيطة بشكل مخادع:
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);\n\nهل هذا كل شيء؟ تقريبًا. ولكن هناك ثلاثة "تحذيرات" مهمة لا يعرفها الجميع:
\n\n1. الحجم ثابت
\nالقائمة التي تم الحصول عليها عبر Arrays.asList() لها حجم ثابت. حاول إضافة عنصر:
fruitList.add("orange"); // UnsupportedOperationException!\n\nستحصل على UnsupportedOperationException. لماذا؟ لأنها تحت الغطاء ليست ArrayList حقيقية، بل تنفيذ مدمج يقوم فقط بتغليف المصفوفة.
2. التغييرات في المصفوفة تنعكس على القائمة
\nالقائمة هي "نافذة" على المصفوفة الأصلية. غيّر المصفوفة - ستتغير القائمة:
\n\nfruits[0] = "apricot";\nSystem.out.println(fruitList.get(0)); // apricot\n\nقد يؤدي هذا إلى أخطاء يصعب اكتشافها، خاصةً إذا تم تمرير المصفوفة بين الدوال.
\n\n3. الأنواع البدائية لا تعمل
\nحاول تحويل مصفوفة int إلى قائمة:
\n\nint[] numbers = {1, 2, 3};\nList<int[]> list = Arrays.asList(numbers); // ليست List<Integer>، بل List<int[]>!\n\nبدلاً من قائمة أرقام، ستحصل على قائمة تحتوي على عنصر واحد - المصفوفة بأكملها. Java لا تستطيع تلقائيًا تغليف الأنواع البدائية في قائمة.
\n\n5 طرق لتحويل مصفوفة إلى قائمة في Java
\n\nدعنا نستعرض جميع الطرق الرئيسية لتحويل مصفوفة إلى قائمة في Java مع أمثلة وشروحات.
\n\nالطريقة 1: الكلاسيكية Arrays.asList()
\nمناسبة عندما تحتاج إلى قائمة للقراءة فقط أو عندما تكون متأكدًا من أنك لن تغير حجمها.
\n\nString[] colors = {"red", "green", "blue"};\nList<String> colorList = Arrays.asList(colors);\n// يعمل: القراءة، استبدال العناصر\ncolorList.set(0, "yellow");\n// لا يعمل: الإضافة، الحذف\n\nالطريقة 2: إنشاء ArrayList جديد
\nالطريقة الأكثر أمانًا لتحويل مصفوفة إلى ArrayList في Java هي إنشاء مثيل جديد:
\n\nString[] animals = {"cat", "dog", "bird"};\nList<String> animalList = new ArrayList<>(Arrays.asList(animals));\n// الآن يمكنك الإضافة والحذف\nanimalList.add("fish"); // OK\n\nهذا الأسلوب يعطي قائمة قابلة للتعديل بالكامل، مستقلة عن المصفوفة الأصلية.
\n\nالطريقة 3: Collections.addAll()
\nطريقة أنيقة لتحويل مصفوفة إلى مجموعة Java. مفيدة بشكل خاص عندما تكون القائمة موجودة بالفعل:
\n\nString[] cities = {"Moscow", "Paris", "London"};\nList<String> cityList = new ArrayList<>();\nCollections.addAll(cityList, cities);\n// أو في سطر واحد:\nList<String> cityList2 = new ArrayList<>(cities.length);\nCollections.addAll(cityList2, cities);