قائمة Java هي مجموعة مرتبة. قائمة Java هي واجهة تمتد من واجهة Collection. توفر قائمة Java التحكم في الموضع الذي يمكنك إدراج عنصر فيه. يمكنك الوصول إلى العناصر بواسطة فهرسها وكذلك البحث في القائمة.
قائمة Java
بعض النقاط المهمة حول قائمة Java هي؛
- واجهة قائمة Java هي عضو في إطار عمل مجموعات Java.
- تسمح القائمة بإضافة عناصر مكررة.
- تسمح القائمة بوجود عناصر “null”.
- حصلت واجهة القائمة على العديد من الأساليب الافتراضية في Java 8 ، على سبيل المثال replaceAll، sort وspliterator.
- تبدأ الفهارس في القائمة من 0، تمامًا مثل الصفائف.
- تدعم القائمة التخصيصات العمومية ويجب استخدامها في كل مرة ممكنة. استخدام التخصيصات العمومية مع القائمة سيتجنب ClassCastException في وقت التشغيل.
مخطط فئة قائمة Java
تمتد واجهة List في جافا من واجهة Collection. واجهة Collection تمتد من واجهة Iterable. بعض فئات تنفيذ List الأكثر استخدامًا هي ArrayList وLinkedList وVector وStack وCopyOnWriteArrayList. يوفر AbstractList تنفيذًا هيكليًا لواجهة List لتقليل الجهد في تنفيذ List.
أساليب List في جافا
بعض أساليب List في جافا المفيدة هي:
- int size(): للحصول على عدد العناصر في القائمة.
- boolean isEmpty(): للتحقق مما إذا كانت القائمة فارغة أو لا.
- boolean contains(Object o): تُرجع true إذا كانت هذه القائمة تحتوي على العنصر المحدد.
- Iterator<E> iterator(): تُرجع مُحددًا على العناصر في هذه القائمة بتسلسل مناسب.
- Object[] toArray(): تُرجع مصفوفة تحتوي على جميع العناصر في هذه القائمة بتسلسل مناسب.
- boolean add(E e): تُلحق العنصر المحدد في نهاية هذه القائمة.
- boolean remove(Object o): تقوم بإزالة أول حدوث للعنصر المحدد من هذه القائمة.
- boolean retainAll(Collection extends E> c): يحتفظ فقط بالعناصر في هذه القائمة التي تحتوي على المجموعة المحددة.
- void clear(): يزيل جميع العناصر من القائمة.
- E get(int index): Returns the element at the specified position in the list.
- E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
- ListIterator
listIterator() : يعيد محدد قائمة على العناصر في القائمة. - List
subList(int fromIndex, int toIndex) : يعيد عرضًا لجزء من هذه القائمة بين fromIndex المحدد ، بما في ذلك، و toIndex الحصري. القائمة المعادة مدعومة من قبل هذه القائمة ، لذا التغييرات غير الهيكلية في القائمة المعادة معكوسة في هذه القائمة ، والعكس بالعكس.
بعض الطرق الافتراضية التي تمت إضافتها إلى List في Java 8 هي:
- default void replaceAll(UnaryOperator
operator) : يستبدل كل عنصر في هذه القائمة بنتيجة تطبيق العامل على ذلك العنصر. - default void sort(Comparator super E> c): يرتب هذه القائمة وفقًا للترتيب الذي يفرضه المقارن المحدد.
- default Spliterator
spliterator() : ينشئ Spliterator على العناصر في هذه القائمة.
Java Array to List
يمكننا استخدام فئة Arrays للحصول على عرض للمصفوفة كقائمة. ومع ذلك، لن نكون قادرين على القيام بأي تعديل هيكلي على القائمة، فسيتم طرح java.lang.UnsupportedOperationException. لذلك، الطريقة الأفضل هي استخدام حلقة for لإنشاء قائمة عن طريق تكرار العناصر في المصفوفة. فيما يلي مثال بسيط يوضح كيفية تحويل مصفوفة Java إلى قائمة بشكل صحيح.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToList {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
List vowelsList = Arrays.asList(vowels);
System.out.println(vowelsList);
/**
* List is backed by array, we can't do structural modification
* Both of the below statements will throw java.lang.UnsupportedOperationException
*/
//vowelsList.remove("e");
//vowelsList.clear();
//استخدام حلقة for لنسخ العناصر من المصفوفة إلى القائمة، آمن للتعديل على القائمة
List myList = new ArrayList<>();
for(String s : vowels){
myList.add(s);
}
System.out.println(myList);
myList.clear();
}
}
اختر أيًا من الأساليب أعلاه استنادًا إلى متطلبات مشروعك.
Java List to Array
A simple example showing the correct way to convert a list to array.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListToArray {
public static void main(String[] args) {
List letters = new ArrayList();
// إضافة مثال
letters.add("A");
letters.add("B");
letters.add("C");
//تحويل القائمة إلى مصفوفة
String[] strArray = new String[letters.size()];
strArray = letters.toArray(strArray);
System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
}
}
Java List sort
هناك طريقتان لفرز قائمة. يمكننا استخدام فئة Collections للفرز الطبيعي أو يمكننا استخدام طريقة List sort() واستخدام مُقارننا الخاص للفرز. فيما يلي مثال بسيط لفرز قائمة Java.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class ListSortExample {
public static void main(String[] args) {
List ints = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
//الفرز الطبيعي باستخدام فئة Collections
Collections.sort(ints);
System.out.println("Natural Sorting: "+ints);
//الفرز المخصص، بترتيب عكسي
ints.sort((o1,o2) -> {return (o2-o1);});
System.out.println("Reverse Sorting: "+ints);
}
}
A sample output is given below. Since I am using Random for generating list elements, it will be different every time.
Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]
Java List Common Operations
أكثر العمليات شيوعا التي يتم تنفيذها على قائمة جافا هي إضافة، إزالة، تعيين، مسح، الحجم إلخ. أدناه مثال بسيط على قائمة جافا يُظهر استخدام الأساليب الشائعة.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListExample {
public static void main(String args[]) {
List vowels= new ArrayList();
//مثال إضافي
vowels.add("A");
vowels.add("I");
//لنقم بإدراج E بين A و I
vowels.add(1,"E");
System.out.println(vowels);
List list = new ArrayList();
list.add("O");list.add("U");
//إلحاق عناصر القائمة بالحروف
vowels.addAll(list);
System.out.println(vowels);
//مثال مسح لتفريغ القائمة
list.clear();
//مثال الحجم
System.out.println("letters list size = "+vowels.size());
//مثال تعيين
vowels.set(2, "E");
System.out.println(vowels);
//مثال subList
vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
list = vowels.subList(0, 2);
System.out.println("letters = "+vowels+", list = "+list);
vowels.set(0, "A");
System.out.println("letters = "+vowels+", list = "+list);
list.add("U");
System.out.println("letters = "+vowels+", list = "+list);
}
}
إخراج البرنامج المبين أعلاه لقائمة جافا هو;
[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]
مؤشر قائمة جافا
أدناه مثال بسيط يُظهر كيفية تكرار القائمة في جافا.
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListIteratorExample {
public static void main(String[] args) {
List list = new ArrayList<>();
for(int i=0; i<5; i++) list.add(i);
Iterator iterator = list.iterator();
//تكرار بسيط
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n"+list);
//تعديل القائمة باستخدام المكرر
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(list);
//تغيير هيكل القائمة أثناء التكرار
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next(); //ConcurrentModificationException here
if(x==1) list.add(10);
}
}
}
إخراج البرنامج المبين أعلاه لمكرر قائمة جافا هو;
0, 1, 2, 3, 4,
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)
هذا كل شيء في ملخص سريع عن القائمة في جافا. أتمنى أن تساعدك أمثلة قوائم جافا هذه في البدء في برمجة مجموعات القوائم.
Source:
https://www.digitalocean.com/community/tutorials/java-list