الخوارزميات وهياكل البيانات بلغة Java: دليل عملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الخوارزميات وهياكل البيانات بلغة Java: من النظرية إلى التطبيق



فهم الخوارزميات وهياكل البيانات هو الأساس الذي يُبنى عليه مسار أي مطور Java. بدون هذه المعرفة، يصعب كتابة كود فعال وقابل للتوسع والصيانة. في هذه المقالة، سنشرح هياكل البيانات والخوارزميات الرئيسية التي ستستخدمها يوميًا، وسنعرض تنفيذها بلغة Java مع أمثلة عملية.



1. هياكل البيانات الأساسية في إطار مجموعات Java (Java Collections Framework)



تقدم Java إطارًا قويًا للمجموعات يتضمن هياكل البيانات الأساسية. دعنا ننظر إلى الثلاثة الأكثر شيوعًا.



ArrayList - المصفوفة الديناميكية



ArrayList هو تنفيذ للمصفوفة الديناميكية. يتمدد تلقائيًا عند إضافة عناصر جديدة، مما يجعله خيارًا ممتازًا للقوائم ذات الحجم غير المعروف مسبقًا.



import java.util.ArrayList;

public class ArrayListExample { public static void main(String[] args) { ArrayList<String> fruits = new ArrayList<>(); fruits.add("تفاح"); fruits.add("موز"); fruits.add("برتقال");

System.out.println("العنصر الثاني: " + fruits.get(1)); // موز fruits.remove(0); System.out.println("الحجم بعد الحذف: " + fruits.size()); // 2 for (String fruit : fruits) { System.out.println(fruit); } }}


تعقيد العمليات: الوصول حسب الفهرس - O(1)، الإدراج/الحذف في المنتصف - O(n).



HashMap - جدول التجزئة



يخزن HashMap أزواج "مفتاح-قيمة" ويوفر وصولًا شبه فوري للبيانات باستخدام المفتاح.



import java.util.HashMap;

public class HashMapExample { public static void main(String[] args) { HashMap<String, Integer> ages = new HashMap<>(); ages.put("آنا", 25); ages.put("إيفان", 30); ages.put("ماريا", 28);

System.out.println("عمر آنا: " + ages.get("آنا")); // 25 // التحقق من وجود المفتاح if (ages.containsKey("إيفان")) { System.out.println("تم العثور على إيفان!"); } // تكرار جميع الإدخالات for (String name : ages.keySet()) { System.out.println(name + ": " + ages.get(name) + " سنة"); } }}


تعقيد العمليات: الإدراج، البحث، الحذف - في المتوسط O(1).



LinkedList - القائمة المزدوجة الارتباط



تتكون LinkedList من عقد، كل منها يخزن مراجع للعنصر السابق والتالي. مثالية للإدراج والحذف المتكرر في بداية أو نهاية القائمة.



import java.util.LinkedList;

public class LinkedListExample { public static void main(String[] args) { LinkedList<Integer> queue = new LinkedList<>(); // استخدامها كطابور (FIFO) queue.addLast(1); queue.addLast(2); queue.addLast(3); System.out.println("الأول في الطابور: " + queue.getFirst()); // 1 queue.removeFirst(); System.out.println("بعد الحذف: " + queue); // [2, 3] // استخدامها كمكدس (LIFO) queue.push(10); // إضافة في البداية queue.push(20); System.out.println("قمة المكدس: " + queue.pop()); // 20 }}


تعقيد العمليات: الإدراج/الحذف في البداية/النهاية - O(1)، الوصول حسب الفهرس - O(n).



2. خوارزميات الفرز بلغة Java



الفرز هو أحد أكثر المهام شيوعًا. دعنا ننظر إلى تنفيذين كلاسيكيين.



فرز الفقاعات (Bubble Sort)



خوارزمية بسيطة ولكنها بطيئة. تُستخدم للأغراض التعليمية.



public class BubbleSort {    public static void bubbleSort(int[] arr) {        int n = arr.length;        boolean swapped;                for (i                

المدونات

توصيات الكتب