البرمجة

تحسين أداء البحث عن العناصر المكررة في Java باستخدام HashSet

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

لتحسين الكفاءة، يمكن استخدام هيكلة البيانات Set لتخزين العناصر والبحث عنها بسرعة أفضل. يمكن تحقيق ذلك باستخدام HashSet، الذي يوفر وقت بحث أقل بكثير من البحث الخطي. على سبيل المثال:

java
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class FindDuplicates { public static void main(String[] args) { List A = new ArrayList<>(); List B = new ArrayList<>(); // initialize lists A and B Set uniqueSet = new HashSet<>(A); for (String b : B) { if (uniqueSet.contains(b)) { System.out.println("duplicate: " + b); } } } }

هنا، تم إنشاء HashSet من List A، ثم تم البحث في List B باستخدام contains. هذا يقلل بشكل كبير من التعقيد ويزيد من الكفاءة. تجنبت الحلقة المزدوجة التي تستخدم brute force method، مما يقلل من الوقت المستهلك في البحث.

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

المزيد من المعلومات

بالتأكيد، يمكن تحسين أداء البحث عن العناصر المكررة بين قائمتين باستخدام ميزات Java 8 والتي تجعل الشيفرة أكثر قوة وإتقانًا. يُظهر الكود التالي كيفية استخدام تعبيرات Lambda و Stream API:

java
import java.util.ArrayList; import java.util.List; public class FindDuplicates { public static void main(String[] args) { List A = new ArrayList<>(); List B = new ArrayList<>(); // initialize lists A and B A.stream() .map(String::toLowerCase) // تحويل الأحرف إلى صغيرة لتجنب التفوق الحساس لحالة الأحرف .distinct() .forEach(uniqueItem -> { if (B.stream().anyMatch(item -> item.equalsIgnoreCase(uniqueItem))) { System.out.println("duplicate: " + uniqueItem); } }); } }

تستخدم هذه الشيفرة تعبيرات Lambda لتبسيط الشيفرة وجعلها أكثر قراءةً. تم استخدام map لتحويل جميع العناصر في List A إلى صغيرة الأحرف لتجنب التفوق الحساس لحالة الأحرف، وثم استخدم distinct للتأكد من عدم وجود عناصر متكررة في List A. ثم تم استخدام forEach للبحث في List B باستخدام anyMatch للعثور على أي عنصر يطابق بشكل فعّال.

هذا النهج يجمع بين قوة لغة Java وشيفرة أكثر إتقانًا لتحسين أداء البحث عن العناصر المكررة بين القوائم.

زر الذهاب إلى الأعلى