هل Java مناسبة لهياكل البيانات والخوارزميات؟
نعم. هي مُسهبة مقارنةً بلغة Python، لكن هذا الإسهاب يساعدك وأنت تتعلم: الأنواع تجعل كل عقدة ومرجع ومعامل نوع عام (generic) صريحاً، ومجموعات المكتبة القياسية تقابل هياكل هذا المسار واحداً بواحد. وهي سريعة بما يكفي لكل منصات التحكيم والمقابلات تقريباً، وهي اللغة التي تستخدمها كثير من المقررات الجامعية وعمليات التوظيف في الجامعات.
أي مجموعات Java تقابل أي هياكل بيانات؟
ArrayDeque مكدس أو طابور، وLinkedList قائمة مترابطة مزدوجة، وHashMap وHashSet جداول تجزئة، وPriorityQueue كومة ثنائية صغرى، وTreeMap وTreeSet أشجار أحمر-أسود، وهي نوع من أشجار البحث الثنائية المتوازنة مثل شجرة AVL التي تبنيها في الخطوة الثانية. ولا يوجد صنف لشجرة البادئات أو للرسم البياني؛ فهذان تكتبهما بنفسك.
هل أستخدم Stack أم ArrayDeque في Java؟
ArrayDeque. فالصنف Stack صنف قديم يرث من Vector، لذا فكل استدعاء فيه متزامن، كما يرث دوال قوائم لا ينبغي أن تكون في مكدس؛ وتوثيق Java نفسه يوصي باستخدام Deque بدلاً منه. ومُجرو المقابلات يلاحظون ذلك: السطر المعتاد هو Deque<Integer> stack = new ArrayDeque<>();.
Java أم C++ لتعلم DSA؟
اللغة التي ستجري بها مقابلاتك أو تنافس بها. لغة C++ هي المعيار في البرمجة التنافسية بفضل سرعتها وSTL؛ وJava جيدة بالقدر نفسه للمقابلات، ووجود جامع المهملات فيها يعني أنك لا تدير الذاكرة يدوياً بينما الخوارزميات ما زالت جديدة عليك. الأفكار متطابقة، لذا فالانتقال لاحقاً يعني ترجمة الصياغة لا إعادة التعلم.
ما الدورات في هذا المسار التي لا تُدرَّس بلغة Java؟
ثلاث دورات: البرمجة الديناميكية وسلسلة مقابلات Python تُدرَّسان بلغة Python، وعمليات البتات بلغة C++. وهي مدرجة بعد الخطوات، ولكل منها رابط يفتحها بلغتها، وكلا الموضوعين سهل المتابعة لمن يعرف Java: علاقة التكرار واحدة في أي لغة، وفي Java معاملات البتات الموجودة في C++ إضافة إلى الإزاحة بلا إشارة >>>.
هل أحتاج إلى معرفة Java قبل بدء هذا المسار؟
ينبغي أن تكون متمكّناً من الأصناف والدوال والمصفوفات والحلقات؛ والأنواع العامة (generics) تفيد، وستكتسبها في الطريق. إن لم تصل إلى ذلك بعد، فدورة Java من Coddy توصلك إليه أولاً مجاناً، ويبدأ هذا المسار من حيث تنتهي.