System.Collections.arrayList Class هي صفيف خاص. عن طريق إضافة وإزالة العناصر ، يمكن تغيير طول الصفيف ديناميكيًا.
واحد. ميزة
1. يدعم وظيفة تغيير الحجم التلقائي
2. إدراج مرن للعناصر
3. حذف العناصر المرنة
اثنين. قيود
بالمقارنة مع المصفوفات العادية ، فإن السرعة أسوأ قليلاً
ثلاثة. إضافة عناصر
1. PublicVirtualIntadd (ObjectValue) ؛
أضف كائنًا إلى نهاية ArrayList
ArrayList Alist = new ArrayList () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛المحتوى هو
ABCDE
2. PublicVirtualVoidinsert (Intindex ، ObjectValue) ؛
أدخل العنصر في الفهرس المحدد لـ ArrayList
arraylist alist = new ArrayList () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ alist.insert (0 ، "aa") ؛النتيجة هي
AAABCDE
3.
أدخل عنصرًا في المجموعة في الفهرس المحدد لقائمة ArrayList
arraylist alist = new arraylist () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ arraylist 2 = newArrayList () ؛ list2النتيجة هي
ABTTTTTCDE
أربعة. يمسح
1. PublicVirtualVoidRemove (ObjectObj) ؛
قم بإزالة المباراة الأولى لكائن معين من قائمة ArrayList ، لاحظ أنه الأول
arraylist alist = new arraylist () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ alist.remove ("a") ؛النتيجة هي
BCDE
2. PublicVirtualVoidremoveeAt (IntIndex) ؛
يزيل العناصر في الفهرس المحدد لـ ArrayList
alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ alist.removeat (0) ؛النتيجة هي
BCDE
3.
يزيل مجموعة من العناصر من ArrayList. يمثل الفهرس الفهرس ، ويمثل العد الرقم الذي يبدأ من الفهرس
alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ alist.removerange (1،3) ؛النتيجة هي
انسخ الرمز على النحو التالي: AE
4. PublicVirtualVoidClear () ؛
إزالة جميع العناصر من ArrayList.
خمسة. نوع
1.PublicVirtualVoidsort () ؛
فرز العناصر في قائمة ArrayList أو جزء منه.
ArrayListalist = newArrayList () ؛ alist.add ("e") ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ dropdownlist1.datasource = alist ؛النتيجة هي
eabcd
ArrayListalist = newArrayList () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e")النتيجة هي
ABCDE
2.PublicVirtualVoidreverse () ؛
يعكس ترتيب العناصر في قائمة ArrayList أو جزء منه.
ArrayListalist = newArrayList () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ alist.reverse () ؛ // reverseddownlist1.datasource = alist ؛النتيجة هي
edcba
ستة. يجد
1.PublicVirtualIntIndexof (كائن) ؛
2.PublicVirtualIntIndexof (كائن ، int) ؛
3.PublicVirtualIntIndexof (كائن ، int ، int) ؛
إرجاع الفهرس القائم على الصفر للمباراة الأولى من قائمة ArrayList أو جزء منه. لم يتم العثور على عودة -1.
ArrayList Alist = new ArrayList () ؛ Alist.add ("A") ؛ Alist.add ("B") ؛ Alist.add ("C") ؛ Alist.add ("D") ؛ Alist.add ("E") ؛ intnindex = alist.indexof ("a") ؛ // 1 nindex = alist.indexof ("p") ؛ // غير موجود ، -1 4.PublicVirtualIntlastIndexof (كائن) ؛
5.PublicVirtualIntlastIndexof (كائن ، int) ؛
6.PublicVirtualIntLastIndexof (كائن ، int ، int) ؛
إرجاع الفهرس القائم على الصفر في المباراة الأخيرة من قائمة ArrayList أو جزء منه.
ArrayList Alist = new ArrayList () ؛ Alist.add ("A") ؛ Alist.add ("B") ؛ alist.add ("a") ؛ // نفس 0 alist.add ("d") ؛ Alist.add ("E") ؛ intnindex = alist.lastindexof ("a") ؛ // القيمة 2 بدلاً من 0 7.PublicVirtualBoolContains (ObjectItem) ؛
يحدد ما إذا كان العنصر في قائمة ArrayList. العودة بشكل صحيح إذا تم تضمينه ، وإلا مرة أخرى خاطئة
سبعة. آخر
1. PublicVirtualIntCapacity {get ؛ set ؛}
يحصل أو يحدد عدد العناصر التي يمكن أن تحتوي عليها قائمة ArrayList.
2. PublicVirtualIntcount {get ؛}
يحصل على عدد العناصر الموجودة بالفعل في قائمة ArrayList.
السعة هي عدد العناصر التي يمكن أن تخزنها قائمة ArrayList. العد هو عدد العناصر الموجودة بالفعل في قائمة ArrayList. السعة دائما أكبر من أو تساوي العد. إذا تجاوز عدد السعة عند إضافة عنصر ، يتم مضاعفة سعة القائمة عن طريق إعادة تلقائي الصفيف الداخلي.
إذا تم تعيين قيمة السعة بشكل صريح ، فيجب إعادة تعيين الصفيف الداخلي أيضًا لاستيعاب السعة المحددة. إذا تم ضبط السعة بشكل صريح على 0 ، فإن وقت تشغيل اللغة الشائعة يحددها على قدرتها الافتراضية. السعة الافتراضية هي 16.
بعد استدعاء Clear ، Count هو 0 ، وفي هذا الوقت ، فإن خفض السعة هو السعة الافتراضية البالغة 16 ، وليس 0
3. PublicVirtualVoidtrimTosize () ؛
حدد السعة على العدد الفعلي للعناصر في ArrayList.
إذا لم تقم بإضافة عناصر جديدة إلى القائمة ، فيمكن استخدام هذه الطريقة لتقليل نظام الذاكرة في القائمة إلى الحد الأدنى.
لمسح جميع العناصر في القائمة تمامًا ، اتصل بالطريقة الواضح قبل استدعاء TrimTosize. سيؤدي قطع قائمة ArrayList الفارغة إلى تحديد سعة ArrayList على السعة الافتراضية ، وليس الصفر.
arraylist alist = new arraylist () ؛ alist.add ("a") ؛ alist.add ("b") ؛ alist.add ("c") ؛ alist.add ("d") ؛ alist.add ("e") ؛ // count = 5 ، القدرة = 16 ، alist.trimtosize () ؛ // count = 5 ؛ 8. تحليل رمز المصدر
تستخدم فئة تنفيذ لواجهة القائمة صفيفًا داخليًا لتخزين قيم العناصر ، وهو ما يعادل مجموعة من الحجم المتغير.
1. التوقيع
الطبقة العامة arraylist <e> يمتد قائمة التجريدية <e> قائمة الأدوات <e> ، عشوائي ، قابلة للاستنساخ ، قابلة للتسلسل
يمكنك أن ترى أن ArrayList يرث فئة AbstractList Abstract ، التي تنفذ معظم طرق واجهة القائمة. إذا كنت ترغب في تنفيذ قائمة غير قابلة للتغيير ، فما عليك سوى ورث هذه الفئة وتنفيذ طرق GET (int) وطرق الحجم. إذا كنت ترغب في تنفيذ قائمة قابلة للتغيير ، فأنت بحاجة إلى تجاوز المجموعة (int ، e). بالإضافة إلى ذلك ، إذا كان حجم القائمة متغيرًا ، فيجب تجاوز أساليب ADD (int ، e) وإزالة ().
2. مُنشئ
يوفر ArrayList ثلاثة منشئين:
ArrayList () ArrayList (مجموعة <؟ تمتد e> c) ArrayList (int inialCappacity)
اتفاقية واجهة التجميع التي يجب أن توفرها كل فئة من فئة التجميع مُنشئين "قياسيين" ، أحدهما مُنشئ بدون معلمات (الأولى أعلاه) ، والآخر مُنشئ مع معلمة واحدة (المعلمات الثانية أعلاه). يوفر ArrayList أيضًا مُنشئًا ثالثًا يقبل قيمة int لتعيين الحجم الأولي لـ Arrayli (الحجم الافتراضي هو 10).
3. الأساليب ذات الصلة
trimtosizepublic void trimtosize () {modcount ++ ؛ int oldcapacity = elementData.Length ؛ if (size <oldcapacity) {elementData = arrays.copyof (elementData ، size) ؛ }}تستخدم لتقليل قدرة قائمة ArrayList إلى حجمها الفعلي الحالي وتقليل سعة التخزين. يتم توريث ModCount المتغير من AbstractList ، وتسجيل عدد المرات التي يتم فيها تعديل القائمة من الناحية الهيكلية. يتم بالفعل تخزين عنصر arraylist في ElementData ، والذي يُعلن باسم: كائن عابر خاص [] ElementData ؛ الحجم المتغير هو عدد عناصر ArrayList. عندما يكون الحجم <OldCapacity ، اتصل بالطريقة المصفوفات.
4.indexof و lasindexof
public int indexof (object o) {if (o == null) {for (int i = 0 ؛ i <size ؛ i ++) if (elementData [i] == null) return i ؛ } آخر {for (int i = 0 ؛ i <size ؛ i ++) if (o.equals (elementData [i])) return i ؛ } العودة -1 ؛ }تُرجع هاتان الطريقتان الفرعية للعنصر المحدد ، ونريد التمييز بين ما إذا كانت المعلمة فارغة. يشبه LastIndexof الفهرس ، ولكن البحث من الخلف إلى الأمام.
5
public void insureCapacity (int mincapacity) {if (mincapacity> 0) insureCapacityInternal (mincapacity) ؛ } private void insureCapacityInternal (int mincapacity) {modcount ++ ؛ // رمز وعي فائض إذا (mincapacity - elementData.Length> 0) تنمو (mincapacity) ؛ } private void تنمو (int mincapacity) {// overflow-concious code int oldcapacity = elementData.Length ؛ int newCapacity = OldCapacity + (OldCapacity >> 1) ؛ if (newCapacity - minicapacity <0) newCapacity = mincapacity ؛ if (newCapacity - max_array_size> 0) newCapacity = hugecapacity (mincapacity) ؛ // عادة ما تكون Mincapacity قريبة من الحجم ، لذلك هذا هو الفوز: elementData = Arrays.copyof (ElementData ، NewCapacity) ؛ }تضمن هذه الطريقة حجم قائمة ArrayList
6.ADD و ADDALL
void public add (int index ، e element) {rangecheckforadd (index) ؛ insureCapacityInternal (حجم + 1) ؛ // زيادة modcount !! System.ArrayCopy (elementData ، index ، elementData ، index + 1 ، size - index) ؛ elementData [index] = element ؛ حجم ++ ؛ } إضافة (int index ، e element) لإضافة عنصر إلى الموضع المحدد. أولاً ، اتصل بـ RangeCheckforadd للتحقق مما إذا كان الفهرس صالحًا. إذا فهرس> الحجم || الفهرس <0 ، سيتم طرح استثناء. ثم تأكد من زيادة السعة بمقدار 1 ، ونظام الاتصال. أخيرًا ، قم بتعيين القيمة في الفهرس على العنصر المضافة. هناك أيضًا طريقة إضافة (e e) المحملة الزائدة التي تضيف العنصر مباشرة إلى النهاية.
Addall (Collection <؟ Extends e> c) و addall (int index ، collection <؟ extends e> c) أضف جميع العناصر في المجموعة إلى النهاية والمواضع المحددة على التوالي.
7. الرموز والإزالة
إزالة المنطقية العامة (الكائن O) {if (o == null) {for (int index = 0 ؛ index <size ؛ index ++) if (elementData [index] == null) {fastremove (index) ؛ العودة صحيح. }} else {for (int index = 0 ؛ index <size ؛ index ++) if (o.equals (elementData [index])) {fastremove (index) ؛ العودة صحيح. }} إرجاع خطأ ؛ }تحذف طريقة إزالة (كائن O) العنصر المحدد. أولاً ، ابحث عن موقع العنصر ، ثم اتصل بـ Fastremove (الفهرس) لحذفه. الرمز كما يلي:
private void fastremove (int index) {modcount ++ ؛ int numMoved = size - index - 1 ؛ if (numMoved> 0) // انقل جميع العناصر وراء index+1 الموضع واحد إلى الأمام system.arraycopy (elementData ، index+1 ، elementData ، index ، numMoved) ؛ elementData [-size] = null ؛ // دع GC تقوم بعملها} يتم استخدام طريقة إزالة (int index) المحملة الزائدة لحذف العناصر في الموقع المحدد. يتم استخدام Removerange (int fromindex ، int toindex) لحذف جميع العناصر بين المواقع المحددة.
REMOVEALL (COLLECTION <؟> C) و RESAINALL (COLLECTION <؟> C) الرموز هي كما يلي:
إزالة منطقية عامة (مجموعة <؟> c) {objects.requirenonnull (c) ؛ إرجاع batchremove (ج ، خطأ) ؛ } Boolean Public RESAINALL (Collection <؟> C) {Objects.Requirenonnull (C) ؛ إرجاع batchremove (C ، صحيح) ؛ }يتم تنفيذها جميعًا عن طريق استدعاء طريقة BatchRemove ، ورمزهم كما يلي:
BATCHREMOVE الخاص (Collection <؟> C ، Boolean Complement) {Final Object [] elementData = this.elementData ؛ int r = 0 ، w = 0 ؛ تعديل منطقي = خطأ ؛ جرب {for (؛ r <size ؛ r ++) if (c.contains (elementData [r]) == complement) elementData [w ++] = elementData [r] ؛ } أخيرًا {// الحفاظ على التوافق السلوكي مع الملخص ، // حتى لو رميات c.contains (). if (r! = size) {system.arrayCopy (elementData ، r ، elementData ، w ، size - r) ؛ W += Size - R ؛ } if (w! = size) {// clear للسماح لـ GC بعمله لـ (int i = w ؛ i <size ؛ i ++) elementData [i] = null ؛ modcount += size - w ؛ الحجم = ث ؛ تعديل = صحيح ؛ }} الإرجاع المعدلة ؛ }هذه الطريقة لها معلمتان. الأول هو مجموعة العمليات والثانية هي قيمة منطقية. من خلال إعداده على صواب أو خطأ ، فإنه يختار ما إذا كان سيتم إزالة أو الاحتفاظ. يضع البيان في Try تلك المتبقية بين 0 و W ، ثم في النهاية الثانية إذا كانت في النهاية تتعامل مع المساحة بعد W ، ويتم تنفيذ أولها عندما يلقي C.Contains () استثناء.