استخدام ArrayList في جافا

ArrayList عبارة عن مصفوفة ديناميكية تنفذ واجهة List. يتمتع مستخدم هذه الواجهة بالتحكم الكامل في العناصر المدرجة والوصول إليها حسب الموضع بالإضافة إلى البحث عن العناصر الموجودة في القائمة.

ArrayList تنفذ جميع طرق القائمة ، أكثر من ذلك ، للفئة طرقها الخاصة مثل معالجة حجم المصفوفة المستخدمة لتخزين القائمة. هذه الفئة تعادل  Vector< / a>.
< / a>Arraylist يستخدم صفيفا يخزن البيانات ، وهذه المصفوفة لديها إمكانية تتكيف تلقائيا في كل مرة يتم فيها إدراج عنصر. هناك طريقة ensureCapacity تزيد من سعة ArrayList قبل إضافة عدد كبير من العناصر لضمان size.

يتم الوصول إلى القائمة في وقت واحد بواسطة مؤشرات ترابط متعددة. يمكن أن يتسبب هذا في حدوث مشكلات عندما يتعلق الأمر بالتعديل أو الإدراج أو الحذف لأن مؤشر ترابط آخر سيصل إلى حجم القائمة وتحديثه. الحل هو مزامنة العمليات باستخدام Collections.synchronizedList.

قائمة القائمة = Collections.synchronizedList (قائمة الصفيف الجديدة (...)) ؛ < / span >< br / >
لتصفح القائمة باستخدام فئة المكرر أو listIterator ، ولكن إذا تم تعديل القائمة: حذف ، إدراج ... بعد إنشاء المكرر ، سيلقي الأخير استثناء كونكورنتورفورميسيبشن. الحل هو إنشاء استبعاد متبادل يهدف إلى منع سلاسل الرسائل الأخرى من الوصول إليه بعد إنشاء المكرر وأثناء القراءة.

Constructors< / h2>ArrayList يحتوي على ثلاثة منشئات:

- ArrayList () < / span>: ينشئ قائمة فارغة بحجم أولي 10.
- ArrayList(Collection c): ينشئ قائمة من مجموعة بيانات ويطرح استثناء
NullPointerException إذا كانت المجموعة فارغة.
- ArrayList (int capacite) < / span >: ينشئ قائمة عن طريق تعيين الحجم الأولي ويلقي IllegalArgumentException إذا كان الحجم سالبا.

Methods< / h2>1) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >add (كائن o) < / span >: يضيف عنصرا إلى النهاية.
list.add ("مرحبا") ؛

2) إضافة (مؤشر int ، الكائن o) < / span>: إدراج في middle.
< حدود الجدول = "1" cellpadding = "10" النمط = "لون الخلفية: #eeeeee ؛ انهيار الحدود: الانهيار. العرض: 100٪ ؛" >list.add(3, "e"); < / td>< / tr>< / tbody>< / table> يقوم بإدراج سلسلة السلسلة في الموضع الثالث.

3) < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >addAll (المجموعة ج) < / span>: إضافة مجموعة.
< حدود الجدول = "1" cellpadding = "10" style = "لون الخلفية: #eeeeee; انهيار الحدود: الانهيار. العرض: 100٪ ؛" >ArrayList l1 = ArrayList الجديد ();
l1.add("word")؛
l1.add(12);
l1.add(10.4f);
list.addAll(l1); < / td>< / tr>< / tbody>< / table>تضيف هذه الطريقة قائمة أخرى l1 < / span> في نهاية القائمة قائمة.

4) < نمط الامتداد = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >addAll (فهرس int ، المجموعة c) < / span>: إضافة مجموعة في المنتصف.
< حدود الجدول = "1" cellpadding = "10" style = "لون الخلفية: #eeeeee ؛ انهيار الحدود: الانهيار. العرض: 100٪ ؛" >list.addAll(3, l1); تدرج القائمة l1 في الموضع 3. سيتم إزاحة العناصر الأخرى التي تحتوي على فهرس أكبر من 3.

5) واضح () < / span >: حذف جميع العناصر.

6) < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >يحتوي على (كائن o) < / span>: عضوية العنصر.
<حد الجدول = "1" cellpadding = "10" style = "لون الخلفية: #eeeeee ؛ انهيار الحدود: الانهيار. العرض: 100٪ ؛" >boolean b = list.contains(o) تكون قيمة b صحيحة إذا كان الكائن o ينتمي إلى القائمة.

8) ensureAbility (int capacite) < / span>: يزيد من السعة ، ويضمن أنه يمكنه الاحتفاظ بعدد من العناصر بأقل سعة.
list.ensureCapacity(10); < / td>< / tr>< / tbody>< / table>سيؤدي ذلك إلى زيادة السعة ب 10 عناصر.

9) < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >get(int index): إرجاع الكائن إلى موضع واحد.
system.out.println(list.get(2)); < / td>< / tr>< / tbody>< / table>تعرض هذه الوظيفة الكائن الثاني المخزن في القائمة.

10) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >indexOf(Object o): إرجاع فهرس عنصر.
int k = indexOf("o4"); < / td>< / tr>< / tbody>< / table> سيتلقى المتغير الصحيح k فهرس التكرار الأول للكائن o4. قلنا حسنا فقط أول واحد  حدوث.< BR / >< BR / >11) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >isEmpty () < / span>: إرجاع true إذا كانت القائمة فارغة.
boolean b = list.isEmpty (); < / td>< / tr>< / tbody>< / table>إذا كانت القائمة فارغة ، فهذا صحيح.

12) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >remove(Object o): يحذف التكرار الأول للكائن o.
<حد الجدول = "1" cellpadding="10" style="background-color: #eeeeee; انهيار الحدود: الانهيار. العرض: 100٪ ؛" >
boolean b = list.remove("o4");
إرجاع true إذا كان الكائن موجودا وتم حذفه بنجاح.

13) إزالةالكل (مجموعة<؟ > ج): يحذف العناصر الموجودة في المجموعة التي تم تمريرها كوسيطات.
AarrayList< سلسلة> lc = قائمة الصفيف الجديدة< سلسلة> ();
lc . إضافة ("o1") ؛
lc . إضافة ("o2") ؛
lc . إضافة ("O3") ؛
list.removeAll(lc); < / td>< / tr>< / tbody>< / table>يبحث عن العناصر ويحذفها.

14) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >removeRange (int start ، int end) < / span>: يزيل العناصر الموجودة بين بداية ونهاية.
list.removeRange (3،8) ؛ < / td>< / tr>< / tbody>< / table>يحذف هذا الإجراء العناصر بين 3 و 8.

15) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >يحتفظكل (مجموعة<؟ > ج) < / span >: يحتفظ فقط بالعناصر الموجودة في المجموعة c.

16) set (int index، Object o): يعدل الكائن إلى موضع معين.
list.set(3, "o5"); < / td>< / tr>< / tbody>< / table>تم استبدال الكائن في الموضع 3 ب o5.

17) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >size(): إرجاع عدد العناصر.

18) subList (بداية int ، نهاية int) < / span>: إرجاع الجزء بين البداية والنهاية.

19) < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >toArray()
: إرجاع صفيف من بعد واحد.
<حد الجدول = "1" cellpadding="10" style="background-color: #eeeeee; انهيار الحدود: الانهيار. العرض: 100٪ ؛" >
String[] t = list.toArray();
تحتوي صفيف t على جميع الكائنات الموجودة في القائمة. تكون هذه الطريقة مفيدة عندما يكون لديك دالة تقبل المصفوفات فقط ، على سبيل المثال.

20) trimToSize () < / span >: يقلل من سعة التخزين إلى أقصى مستوى.
< h2 >كيفية استعراض ArrayList< / h2 > يمكنك استعراض ArrayList بطريقتين:

1) حلقة ل < / span >< / h4 >< حدود الجدول = "1" cellpadding = "10" النمط = "لون الخلفية: #eeeeee ؛ انهيار الحدود: الانهيار. العرض: 100٪ ؛" >

for(int i = 0; i < list.size(); i++)
  نبسب؛ system.out.println(list.get(i));
أو على سبيل المثال إذا عرفنا النوع:
for (رقم صحيح: قائمة)
  نبسب؛ system.out.println (عدد) ؛ < / td>< / tr>< / tbody>< / table>

2) المكرر + بينما

<حد الجدول = "1" cellpadding = "10" النمط = "لون الخلفية: #eeeeee; انهيار الحدود: الانهيار. العرض: 100٪ ؛" ><نمط tbody = "الهامش الأيسر: 10 بكسل ؛" >
Iterator itr = list.iterator ();
while(itr.hasNext())
  نبسب؛ نبسب؛ system.out.println(itr.next()); < / td>< / tr>< / tbody>< / table>

example< / h2 >< pre class = "java" name = "code" >import java.util.ArrayList ؛

اختبار الفئة العامة {

الفراغ العام الثابت الرئيسي (سلسلة [] args) {

// إنشاء قائمة صفيف بسعة أولية تبلغ 4
ArrayList str = ArrayList(4) جديد

//Add
str.add("o1")؛
str.add ("o2") ؛
str.add("o3")؛
str.add ("o4") ؛

// بعض الطرق التي رأيناها
System.out.println ("فهرس "+" o2: "+ str.indexOf ("o2"));
System.out.println ("o3 موجود؟" +str.contains("o3"));
System.out.println ("تمت إزالة o2 بنجاح: "+ str.reremove ("o2")) ؛
System.out.println("size: "+str.size());
System.out.println("[1, 3]: "+str.subList(1, 3));

// parcours
for (String s : str)
System.out.println (s) ؛

str.clear ();
System.out.println ("القائمة فارغة؟" +str.isEmpty ());

}
} < / سلسلة >< / سلسلة >< / قبل > المراجع :
javadoc: ArrayList