العودة إلى الدورة

العمل مع واجهة Set (HashSet, TreeSet)

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 38: العمل مع واجهة Set

تجسد واجهة Set المفهوم الرياضي للمجموعة: وهي مجموعة غير مرتبة تحتوي فقط على عناصر فريدة.

1. HashSet

  • التنفيذ: تستخدم جدول التجزئة (hash table) للتخزين.
  • الأداء: توفر أداءً ثابتاً (O(1)) للعمليات الأساسية مثل الإضافة والحذف، بافتراض وجود دالة تجزئة جيدة.
  • الترتيب: لا تضمن ترتيب الإدخال.

java import java.util.HashSet; import java.util.Set;

Set uniqueColors = new HashSet<>(); uniqueColors.add("Red"); uniqueColors.add("Blue"); boolean added = uniqueColors.add("Red"); // ستعيد false لأن Red موجود مسبقاً

System.out.println(uniqueColors.size()); // المخرج: 2

2. LinkedHashSet

  • تحافظ على ترتيب الإدخال (تمر عبر العناصر بالترتيب الذي أضيفت به).
  • أبطأ قليلاً من HashSet بسبب عبء الحفاظ على هيكل القائمة المرتبطة.

3. TreeSet

  • التنفيذ: تستخدم هيكل شجري (Red-Black Tree).
  • الترتيب: تخزن العناصر في ترتيبها الطبيعي المفرز.
  • الأداء: العمليات بشكل عام تستغرق وقتاً لوغاريتمياً O(log N)، مما يجعلها أبطأ من HashSet ولكنها ضرورية إذا كان المطلوب مخرجات مرتبة.

java import java.util.TreeSet;

TreeSet sortedNumbers = new TreeSet<>(); sortedNumbers.add(50); sortedNumbers.add(10); sortedNumbers.add(30);

// المخرج: [10, 30, 50] (دائماً مرتبة) System.out.println(sortedNumbers);