أنت تعمل على مشروع لتطوير نظام لجدولة القطارات في شبكة سكك حديدية مزدحمة.
طُلب منك تطوير نموذج أولي لمسارات القطارات في نظام الجدولة. يتكوّن كل مسار من تسلسل من محطات القطار التي يتوقف عندها قطار معيّن.
قرّر فريقك استخدام قائمة مترابطة مزدوجة لتمثيل كل مسار قطار في الجدول الزمني. كل محطة على طول مسار القطار ستُمثَّل بعقدة في القائمة المترابطة.
لا داعي للقلق بشأن أوقات الوصول والمغادرة في المحطات. كل محطة ستُمثَّل ببساطة بعدد.
يمكن تمديد المسارات بإضافة محطات إلى بداية المسار أو نهايته. ويمكن أيضًا تقصيرها بإزالة محطات من بداية المسار أو نهايته.
أحيانًا تُغلق إحدى المحطات، وفي هذه الحالة يجب إزالتها من المسار، حتى لو لم تكن في بداية المسار أو نهايته.
لا يُقاس حجم المسار بمدى سفر القطار، بل بعدد المحطات التي يتوقف عندها.
القائمة المترابطة بنية بيانات أساسية في علم الحاسوب، وكثيرًا ما تُستخدم في تنفيذ بنى بيانات أخرى. وكما يوحي الاسم، فهي قائمة من العقد المترابطة معًا. إنها قائمة من "العقد"، حيث ترتبط كل عقدة بجارتها أو بجيرانها. في القائمة المترابطة الأحادية ترتبط كل عقدة بالعقدة التي تليها فقط. وفي القائمة المترابطة المزدوجة ترتبط كل عقدة بالعقدة التي تسبقها، وكذلك بالعقدة التي تليها.
إذا أردت التعمق أكثر في القوائم المترابطة، فاطّلع على هذا المقال الذي يشرحها برسومات جميلة.
يقدّم هذا التمرين الأنواع العامة.
لكي تنجح الاختبارات، عليك إنشاء صنفك بحيث يقبل أي نوع من المدخلات، مثل Integer أو String.
تعد الأنواع العامة مفيدة لأنها تسمح لك بكتابة كود أكثر عمومية وقابلية لإعادة الاستخدام.
تمثل تطبيقات List وMap في Java مثالين على أصناف تستخدم الأنواع العامة.
باستخدامها يمكنك إنشاء List تحتوي على Integers أو مصفوفة تحتوي على Strings أو أي نوع آخر.
توجد بعض القيود على الأنواع المستخدمة مع الأنواع العامة.
أحدها أنه بمجرد إنشاء List تحتوي على Integers، لا يمكنك وضع Strings فيها.
عليك تحديد النوع الذي تريد وضعه في الصنف عند إنشائه، وعندئذ لا يمكن استخدام تلك النسخة إلا مع ذلك النوع.
على سبيل المثال، يمكنك إنشاء مصفوفة من Integers:
List<Integer> someList = new LinkedList<>();
الآن لا يمكن أن تحتوي someList إلا على Integers. يمكنك أيضًا القيام بما يلي:
List<String> someOtherList = new LinkedList<>()
الآن لا يمكن أن تحتوي someOtherList إلا على Strings.
هناك قيد آخر هو أن أي نوع يُستخدم مع الأنواع العامة لا يمكن أن يكون نوعًا أوليًا، مثل int أو long.
ومع ذلك، لكل نوع أولي نوع مرجعي مقابل، لذا بدلًا من int يمكنك استخدام Integer وبدلًا من long يمكنك استخدام Long.
قد يساعدك الاطلاع على مثال على حالة استخدام للأنواع العامة على البدء.
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.