يخلط الكثير من المبتدئين بين مفهوم طريقة Arrays.asList() وبنية البيانات ArrayList. على الرغم من أنهما قد يبدوان متشابهين، إلا أن هذين الأمرين مختلفان تمامًا عندما يتعلق الأمر بالتنفيذ. في هذا المنشور، سنغطي الاستخدام الأساسي لطريقة Arrays.asList() وسنكشف عن بعض الالتباسات السائدة المتعلقة بها.
لماذا يتم استخدام Arrays.asList()؟
إذا كان لديك مصفوفة تحتاج إلى تحويلها إلى قائمة، فإن java.util.Arrays يوفر مجمّع Arrays.asList() لخدمة هذا الغرض. بكلمات بسيطة، تأخذ هذه الطريقة مصفوفة كمعلمة وتقوم بإرجاع قائمة. تم تطوير الأجزاء الرئيسية من Java Platform API قبل تقديم إطار عمل المجموعات. لذلك، في بعض الأحيان، قد تحتاج إلى الترجمة بين المصفوفات التقليدية والمجموعات الأكثر حداثة. تعمل هذه الوظيفة كحلقة وصل بين المجموعات وواجهات برمجة التطبيقات المستندة إلى المصفوفات.مثال
ألقِ نظرة على المثال التالي:import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
String[] teamMembers = {"Amanda", "Loren", "Keith"};
// using aslist() method
List teamList = Arrays.asList(teamMembers);
System.out.println("List : " + teamList);
HashSet teamHashSet = new HashSet<>(Arrays.asList(teamMembers));
System.out.println("HashSet : " + teamHashSet);
}
}
انتاج:
القائمة: [Amanda, Loren, Keith] HashSet: [Keith, Loren, Amanda] // HashSet لا يحافظ على النظام
ما الفرق بين Arrays.asList() وArrayList؟
عند استدعاء الأسلوب Arrays.asList() على صفيف، فإن الكائن الذي تم إرجاعه ليس ArrayList ( تطبيق صفيف يمكن تغيير حجمه لواجهة القائمة ). إنه كائن عرض باستخدام أساليب get() و set() التي تصل إلى المصفوفة الأساسية. جميع الطرق التي من شأنها تغيير حجم المصفوفة مثل add() أو إزالة() للمكرر المرتبط ترمي UnsupportedOperationException . السبب وراء تجميع برنامج Java بنجاح ولكنه يعطي استثناء وقت التشغيل هو أنه، على ما يبدو، يتم إرجاع "قائمة" كنتيجة لـ Arrays.asList() . حيث تكون جميع عمليات الإضافة/الحذف مسموحة. ولكن بما أن بنية البيانات الأساسية عبارة عن "مصفوفة" غير قابلة لتغيير الحجم ، فمن ثم يتم طرح استثناء في وقت التشغيل. إليك مقتطف يوضح كيف يبدو الأمر:import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
Integer[] diceRoll = new Integer[6];
//using aslist() method
List diceRollList = Arrays.asList(diceRoll);
System.out.println(diceRollList);
// using getters and setters to randomly access the list
diceRollList.set(5, 6);
diceRollList.set(0, 1);
System.out.println(diceRollList.get(5));
System.out.println(diceRollList.get(1));
System.out.println(diceRollList);
diceRollList.add(7); // Add a new Integer to the list
}
}
انتاج:
[فارغة، فارغة، فارغة، فارغة، فارغة] 6 فارغة [1، فارغة، فارغة، فارغة، خالية، 6] استثناء في مؤشر الترابط "الرئيسي" java.lang.UnsupportedOperationException في java.util.AbstractList.add(AbstractList. java:148) في java.util.AbstractList.add(AbstractList.java:108) في ArraysAsListDemo.main(ArraysAsListDemo.java:20)
أمثلة على استخدام طريقة asList()
اعتبارًا من Java SE 5.0، تم الإعلان عن أن طريقة asList() تحتوي على عدد متغير من الوسائط. بدلاً من تمرير مصفوفة، يمكنك أيضاً تمرير عناصر فردية. على سبيل المثال:import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
List seasons = Arrays.asList("winter", "summer", "spring", "fall");
List odds = Arrays.asList(1, 3, 5, 7, 9);
System.out.println(seasons);
System.out.println(odds);
}
}
انتاج:
[الشتاء، الصيف، الربيع، الخريف] [1، 3، 5، 7، 9]
GO TO FULL VERSION