مجموعات Java عبارة عن مجموعات أدوات توفرها Java ، والتي تحتوي على هياكل بيانات شائعة الاستخدام: المجموعات ، القوائم المرتبطة ، قوائم الانتظار ، المداخن ، المصفوفات ، الخرائط ، إلخ.
يمكن تقسيم مجموعات Java إلى 4 أجزاء: قائمة قائمة ، مجموعة تعيين ، خريطة الخريطة ، فئات الأدوات (ITerator iterator ، فئة التعداد التعداد ، المصفوفات والمجموعات).
يظهر أدناه إطار مجموعة أدوات مجموعة Java.
ملاحظة: بالنظر إلى الرسم البياني الإطار أعلاه ، فهم أولاً جذعه ، وهو جمع وخريطة.
Collection هي واجهة ، مجموعة مجردة للغاية ، والتي تحتوي على العمليات والخصائص الأساسية للمجموعة.
يتضمن المجموعة فرعين: قائمة ومجموعة.
(01) قائمة قائمة انتظار مرتبة ، وكل عنصر له فهرس. قيمة الفهرس للعنصر الأول هي 0.
تتضمن فصول تنفيذ قائمة LinkedList و ArrayList و Vector و Stack.
(02) SET هي مجموعة لا تسمح عناصر مكررة.
تشمل فصول التنفيذ مجموعة Hastset و Treeset. تعتمد Hashset على hashmap ، والتي يتم تنفيذها بالفعل من خلال hashmap ؛ تعتمد Treeset على Treemap ، والتي يتم تنفيذها بالفعل من خلال Treemap.
MAP هي واجهة رسم الخرائط ، وهي أزواج قيمة المفاتيح الرئيسية. يحتوي كل عنصر في الخريطة على "مفتاح" و "قيمة تقابل المفتاح".
AbstractMap هي فئة مجردة تنفذ معظم واجهات برمجة التطبيقات في واجهة الخريطة. Hashmap و Treemap و Prefhashmap جميعها ورثت من خريطة التجريدية.
على الرغم من أن علامة التجزئة من القاموس ، فإنها تنفذ واجهة الخريطة.
بعد ذلك ، دعونا ننظر إلى Iterator. إنها أداة لاجتياز المجموعات ، أي أننا عادة ما نعبر المجموعات من خلال Iterator Iterator. نقول أن المجموعة تعتمد على Iterator لأن فئات التنفيذ في المجموعة يجب أن تنفذ وظيفة ITerator () وإعادة كائن Iterator.
يوجد ListIterator خصيصًا للعبور.
دعونا نلقي نظرة على التعداد مرة أخرى ، إنه فئة مجردة قدمها JDK 1.0. مثل ITerator ، فإنه يعبر مجموعة أيضًا ؛ لكن التعداد له وظائف أقل من التكرار. في مخطط الكتلة أعلاه ، لا يمكن استخدام التعداد إلا في علامات التجزئة ، المتجه ، المكدس.
أخيرًا ، انظر إلى المصفوفات والمجموعات. وهما فئتان للأدوات تعملان على المصفوفات والمجموعات.
مع الإطار العام أعلاه ، سنقوم بتحليل كل فئة بشكل منفصل.
بنية جمع
أدناه ، سوف نلخص المجموعة. دعونا نلقي نظرة على مخططات العلاقة لبعض فئات الإطارات في المجموعة:
المجموعة هي واجهة ، وفروعها الرئيسية هما: قائمة ومجموعة.
قائمة ومجموعة هي واجهات ، ويرثون من المجموعة. قائمة قائمة انتظار مرتبة ، ويمكن أن يكون هناك عناصر متكررة في القائمة ؛ في حين أن SET عبارة عن مجموعة في المفاهيم الرياضية ، ولا توجد عناصر متكررة في المجموعة!
قائمة ومجموعة لها فصول التنفيذ الخاصة بهم.
لسهولة التنفيذ ، يتم تعريف فئة AbstractCollection Abstract في المجموعة ، والتي تنفذ معظم الوظائف في المجموعة ؛ وبهذه الطريقة ، في فئة تنفيذ التجميع ، يمكننا حفظ الترميز المكررة عن طريق وراثة AbstractCollection. يرث كل من AbstractList و Abstractset من الملخص ، ويرث فئة تنفيذ القائمة المحددة من الملخص ، ويرث فئة التنفيذ المحددة من AbstractSet.
بالإضافة إلى ذلك ، هناك وظيفة iterator () في المجموعة ، والتي يتم استخدامها لإرجاع واجهة Iterator. عادة ، نعبر المجموعة من خلال Iterator Iterator. ListIritator فريد من نوعه لواجهة القائمة. في واجهة القائمة ، يتم إرجاع كائن ListIrator من خلال ListIratorator ().
بعد ذلك ، دعنا نلقي نظرة على مقدمة كل واجهة وطبقة مجردة ؛ بعد ذلك ، سيكون لدينا فهم مفصل لفئة التنفيذ.
1. مقدمة في المجموعة
تعريف المجموعة كما يلي:
تمتد مجموعة الواجهة العامة <e>
إنها واجهة ، مجموعة مجردة للغاية ، تحتوي على العمليات الأساسية للمجموعة: إضافة ، حذف ، المقاصة ، اجتياز (القراءة) ، سواء كانت فارغة ، والحصول على الحجم ، سواء كانت محمية بواسطة عنصر معين ، وما إلى ذلك.
يجب أن تنفذ جميع الفئات الفرعية لواجهة التجميع (الفئة الفرعية المباشرة والفئة الفرعية غير المباشرة) من مُنشئين: مُنشئين بدون معلمات ومشاركات مع جمع المعلمات. يمكن استخدام مُنشئ يحتوي على معلمات لتحويل نوع المجموعة.
// collection apiabbstract boolean add (e object) Abstract Boolean Addall (Collection <؟ extends e> collection) Abstract void clear () Boolean الملخص يحتوي على (كائن كائن) يحتوي Boolean الملخص (مجموعة <؟ removeall (مجموعة <؟> مجموعة) الملخص Boolean Retainall (Collection <؟> Collection) Abstract int Size () Abstract <T> t []
2. مقدمة في القائمة
تعريف القائمة كما يلي:
قائمة الواجهة العامة <e> تمتد المجموعة <e> {} القائمة هي واجهة موروثة من المجموعة ، أي القائمة هي نوع من المجموعة. قائمة قائمة انتظار مرتبة ، وكل عنصر في القائمة لديه فهرس ؛ قيمة الفهرس للعنصر الأول هي 0 ، وقيمة الفهرس للعناصر اللاحقة +1 بدورها. على عكس المجموعة ، يُسمح بالعناصر المكررة في القائمة. المقدمة الرسمية للقائمة هي كما يلي:
القائمة هي مجموعة تحافظ على طلب لعناصرها. كل عنصر في القائمة لديه فهرس. وبالتالي ، يمكن الوصول إلى كل عنصر بواسطة فهرسه ، حيث يكون الفهرس الأول صفرًا. عادة ، تسمح القوائم عناصر مكررة ، مقارنة بالمجموعات ، حيث يجب أن تكون العناصر فريدة من نوعها.
حول API. نظرًا لأن القائمة ترث من واجهة التجميع ، فإنها تحتوي بشكل طبيعي على جميع الواجهات الوظيفية في المجموعة ؛ نظرًا لأن القائمة عبارة عن قائمة انتظار مرتبة ، فإنها تحتوي أيضًا على واجهة API الخاصة بها. تتضمن العناصر الرئيسية "إضافة وحذف والحصول على وتعديل عناصر في الموقع المحدد" ، "الحصول على الفرعية في القائمة" ، إلخ.
// collection apiabbstract boolean add (e object) Abstract Boolean Addall (Collection <؟ extends e> collection) Abstract void clear () Boolean الملخص يحتوي على (كائن كائن) يحتوي Boolean الملخص (مجموعة <؟ REMOVEALL (Collection <؟> Collection) Abstract Boolean Retainall (Collection <؟> Collection) Abstract int Size () Abstract <T> t [] LastIndexof (كائن كائن) قائمة ملخصية قائمة على e> listIratorator (int location) قائمة ملخصية listiTerator <E> listIratorator () الملخص E إزالة (موقع int) الملخص E مجموعة (موقع int ، كائن e) قائمة الملخص <e> sublist (int start ، int)
3. مقدمة في مجموعة
تم تعريف المجموعة على النحو التالي:
مجموعة الواجهة العامة <e> تمتد المجموعة <e> {} SET عبارة عن واجهة موروثة من المجموعة ، أي أن SET هي أيضًا نوع من التجميع. SET هي مجموعة بدون عناصر مكررة.
حول API. API Set هو بالضبط نفس المجموعة.
. removeall (مجموعة <؟> مجموعة) الملخص Boolean Retainall (Collection <؟> Collection) Abstract int Size () Abstract <T> t []
4. الملخص
تعريف الملخص على النحو التالي:
فئة الملخص العام الملخص <e> تنفذ جمع <e> {} AbstractCollection هي فئة مجردة تنفذ وظائف في المجموعة باستثناء ITerator () و Size ().
الوظيفة الرئيسية لـ AbstractCollection: إنها تنفذ معظم الوظائف في واجهة التجميع. هذا يسهل فئات أخرى لتنفيذ التجميع ، مثل ArrayList ، و LinkedList ، وما إلى ذلك إذا كانت هذه الفئات تريد تنفيذ واجهة التجميع ، فقد تم تنفيذ معظم الواجهات من خلال وراثة AbstractCollection.
5. قائمة الملخص
تعريف الملخص على النحو التالي:
يمتد قائمة الفئة الملخصية العامة <e> ustrultcollection <e> قائمة الأدوات <e> {} AbstractList هي فئة مجردة ترث من AbstractCollection وتنفذ واجهة القائمة. ينفذ وظائف في القائمة باستثناء الحجم () والحصول على (موقع int).
الوظيفة الرئيسية لـ AbstractList: إنها تنفذ معظم الوظائف في واجهة القائمة. هذا يسهل فصول أخرى إلى قائمة وراثة.
بالإضافة إلى ذلك ، مقارنة مع AbstractCollection ، يتم تنفيذ واجهة ITerator () في فئة مجردة Mortclist.
6. الملخص
تعريف الملخص هو على النحو التالي: الفئة الملخصية العامة الملخص <E> يمتد AbstractCollection <e> الأدوات التي تم تعيينها <e> {} AbstractSet هي فئة مجردة ترث من AbstractCollection وتنفذ الواجهة المحددة. نظرًا لأن واجهة SET و API في واجهة التجميع هي نفسها تمامًا ، فإن SET لا تحتوي على واجهة برمجة تطبيقات منفصلة خاصة بها. مثل AbstractCollection ، فإنه ينفذ وظائف في القائمة باستثناء ITerator () و Size ().
الوظيفة الرئيسية لـ AbstractSet: إنها تنفذ معظم الوظائف في الواجهة المحددة. هذا يسهل فئات أخرى لتنفيذ واجهات مجموعة.
7
تعريف التكرار كما يلي:
iterator الواجهة العامة <e> {} Iterator هي واجهة ، وهي مؤلف للمجموعة. يمكن اجتياز مجموعة من خلال العناصر في المجموعة من خلال ITERATAR. تتضمن واجهة API التي توفرها ITERATOR: ما إذا كان العنصر التالي موجودًا ، واحصل على العنصر التالي ، وحذف العنصر الحالي.
ملاحظة: عندما يعبر ITerator المجموعة ، فإنه يعتمد على آلية الفشل. هذا هو ، عندما يعبر مؤشر ترابط معين A مجموعة من خلال التكرار ، إذا تم تغيير محتوى المجموعة بواسطة مؤشرات ترابط أخرى ؛ ثم عند الوصول إلى المجموعة A ، سيتم إلقاء استثناء من ConcurrentModificationException ، مما يؤدي إلى حدث فاشل. فيما يتعلق بالمحتوى التفصيلي للفشل ، سنشرح ذلك على وجه التحديد بعد ملخص الفشل.
.
8. ListIrator
تعريف ListIratorator على النحو التالي:
قائمة الواجهة العامة <e> يمتد ايتراتور <e> {} ListIratorator هي واجهة موروثة من Iterator ، وهي قائمة انتظار في قائمة الانتظار. تستخدم خصيصًا لقائمة مريحة ، يمكن أن توفر اجتيازًا للأمام/للخلف. بالمقارنة مع التكرار ، فإنه يضيف واجهات API مثل الإضافة ، سواء كان العنصر السابق موجودًا ، والحصول على العنصر السابق.
// ListIritor's API // الموروثة من واجهة ITerator التجريدية المجردة boolean hasnext () الملخص e التالي () remove void التجريدي () // إضافة واجهة API API Abstract Add (e Object) Abstract Abstract Abstract hasprevious () Abstract int NextIndex () الملخص السابق () التجريدة intiindex () مجموعة التجريدية (e object)