تحويل مصفوفة إلى قائمة في Java: 5 طرق والمزالق

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تحويل مصفوفة إلى قائمة في Java: من مبتدئ إلى محترف في 10 دقائق

\n\n

هل سبق لك أن كتبت كودًا يعمل بشكل مثالي مع مصفوفة، ثم فجأة احتجت إلى قائمة؟ أو الأسوأ من ذلك، هل تلقيت استثناءً غامضًا عند محاولة إضافة عنصر إلى قائمة تم إنشاؤها من مصفوفة؟ إذا كان الأمر كذلك، فأنت في المكان الصحيح.

\n\n

تحويل array to list في Java هي إحدى تلك المهام التي تبدو بسيطة، ولكنها تخفي العديد من المفاجآت. على Stack Overflow، جمع هذا السؤال مئات الآلاف من المشاهدات، وليس من دون سبب: خلف البساطة الظاهرة تكمن تفاصيل مهمة حول العمل مع المجموعات.

\n\n

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

\n\n

لماذا Arrays.asList() مجرد فخ؟

\n\n

الطريقة الأكثر شيوعًا لتحويل مصفوفة إلى قائمة في Java هي طريقة Arrays.asList(). تبدو بسيطة بشكل مخادع:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);
\n\n

هل هذا كل شيء؟ تقريبًا. ولكن هناك ثلاثة "تحذيرات" مهمة لا يعرفها الجميع:

\n\n

1. الحجم ثابت

\n

القائمة التي تم الحصول عليها عبر Arrays.asList() لها حجم ثابت. حاول إضافة عنصر:

\n\n
fruitList.add("orange"); // UnsupportedOperationException!
\n\n

ستحصل على UnsupportedOperationException. لماذا؟ لأنها تحت الغطاء ليست ArrayList حقيقية، بل تنفيذ مدمج يقوم فقط بتغليف المصفوفة.

\n\n

2. التغييرات في المصفوفة تنعكس على القائمة

\n

القائمة هي "نافذة" على المصفوفة الأصلية. غيّر المصفوفة - ستتغير القائمة:

\n\n
fruits[0] = "apricot";\nSystem.out.println(fruitList.get(0)); // apricot
\n\n

قد يؤدي هذا إلى أخطاء يصعب اكتشافها، خاصةً إذا تم تمرير المصفوفة بين الدوال.

\n\n

3. الأنواع البدائية لا تعمل

\n

حاول تحويل مصفوفة int إلى قائمة:

\n\n
int[] numbers = {1, 2, 3};\nList<int[]> list = Arrays.asList(numbers); // ليست List<Integer>، بل List<int[]>!
\n\n

بدلاً من قائمة أرقام، ستحصل على قائمة تحتوي على عنصر واحد - المصفوفة بأكملها. Java لا تستطيع تلقائيًا تغليف الأنواع البدائية في قائمة.

\n\n

5 طرق لتحويل مصفوفة إلى قائمة في Java

\n\n

دعنا نستعرض جميع الطرق الرئيسية لتحويل مصفوفة إلى قائمة في Java مع أمثلة وشروحات.

\n\n

الطريقة 1: الكلاسيكية Arrays.asList()

\n

مناسبة عندما تحتاج إلى قائمة للقراءة فقط أو عندما تكون متأكدًا من أنك لن تغير حجمها.

\n\n
String[] colors = {"red", "green", "blue"};\nList<String> colorList = Arrays.asList(colors);\n// يعمل: القراءة، استبدال العناصر\ncolorList.set(0, "yellow");\n// لا يعمل: الإضافة، الحذف
\n\n

الطريقة 2: إنشاء ArrayList جديد

\n

الطريقة الأكثر أمانًا لتحويل مصفوفة إلى ArrayList في Java هي إنشاء مثيل جديد:

\n\n
String[] 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\n
String[] 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);

المدونات

توصيات الكتب