English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
در این درس، ما کلاس HashSet جاوا را یاد خواهیم گرفت. ما با استفاده از مثالها، روشهای مختلف مجموعه هش و عملیات را یاد خواهیم گرفت.
کلاس HashSet از جعبه جمعیتهای جاوا فریمورک جمعیتهای جاوا را برای عملکرد ساختار جدول هش ارائه میدهد.
این رابطرابط Set.
برای ایجاد مجموعه هش، ابتدا باید پکیج java.util.HashSet را وارد کنید.
پس از وارد کردن پکیج، میتوانید در جاوا مجموعه هش ایجاد کنید.
// HashSet با حجم 8 و عامل بار 0.75 HashSet<Integer> numbers = new HashSet<>(8, 0.75);
در اینجا، ما یک مجموعه هش به نام ایجاد کردهایم.
توجه داشته باشید که بخش جدید HashSet<>(8, 0.75) ایجاد شده است. در اینجا، پارامتر اولحجم، و پارامتر دومعامل بار.
capacity - حجم این مجموعه هش 8 است. این بدان معناست که میتواند 8 عنصر را ذخیره کند.
loadFactor - عامل بار این مجموعه هش 0.6 است. این بدان معناست که هر زمان که مجموعه هش ما تا 60% پر شود، عناصر به یک مجموعه هش جدید منتقل میشوند که اندازه آن دو برابر اندازه مجموعه هش اولیه است.
مقدار پیشفرض و عامل بار
من الممكن إنشاء table hash دون تحديد سعته ومعدل الحمل. على سبيل المثال،
// HashSet يحتوي على سعة افتراضية وعامل الحمل HashSet<Integer> numbers1 = new HashSet<>();
بالافتراض،
سعة مجموعة HashSet سيكون 16
عامل الحمل سيكون 0.75
يقدم class HashSet مجموعة من methods التي تمكننا من تنفيذ جميع الأنواع من العمليات على المجموعات.
add() - إدراج العنصر المحدد في المجموعة
addAll() - إدراج جميع العناصر من مجموعة محددة في المجموعة
例如,
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumber = new HashSet<>(); // استخدام method add() evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet<Integer> numbers = new HashSet<>(); // استخدام method addAll() numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); } }
نتائج الإخراج
HashSet: [2, 4, 6] New HashSet: [2, 4, 5, 6]
لزيارة عناصر مجموعة HashSet، يمكننا استخدام method iterator(). من أجل استخدام هذا method، يجب علينا استيراد package java.util.Iterator. على سبيل المثال،
import java.util.HashSet; import java.util.Iterator; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // استدعاء method iterator() Iterator<Integer> iterate = numbers.iterator(); System.out.print("استخدام Iterator من HashSet: "); // زيارة العنصر while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
نتائج الإخراج
HashSet: [2, 5, 6] استخدام HashSet باستخدام Iterator: 2, 5, 6,
remove() - من إزالة العنصر المحدد من المجموعة
removeAll() - من إزالة جميع العناصر من المجموعة
例如,
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // استخدام طريقة remove() boolean value1 = numbers.remove(5); System.out.println("هل تم إزالة القيمة 5؟ " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("هل تم إزالة جميع العناصر؟ " + value2); } }
نتائج الإخراج
HashSet: [2, 5, 6] هل تم إزالة القيمة 5؟ true هل تم إزالة جميع العناصر؟ true
يمكن استخدام طرق HashSet لتنفيذ جميع العمليات المختلفة على مجموعات Set.
لإجراء الجمع بين مجموعتين، يمكننا استخدام طريقة addAll(). على سبيل المثال،
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // الجمع للمجموعات numbers.addAll(evenNumbers); System.out.println("الجمع: " + numbers); } }
نتائج الإخراج
HashSet1: [2, 4] HashSet2: [1, 3] الجمع: [1, 2, 3, 4]
لإجراء التكامل بين مجموعتين، يمكننا استخدام طريقة retainAll(). على سبيل المثال،
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers)} HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // التكامل للمجموعات evenNumbers.retainAll(primeNumbers); System.out.println("التكامل: " + evenNumbers); } }
نتائج الإخراج
HashSet1: [2, 3] HashSet2: [2, 4] التكامل: [2]
لإيجاد الفرق بين مجموعتين، يمكننا استخدام طريقة removeAll(). على سبيل المثال،
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers)} HashSet<Integer> oddNumbers = new HashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); //الفرق بين HashSet1 و HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("الفرق: " + primeNumbers); } }
نتائج الإخراج
HashSet1: [2, 3, 5] HashSet2: [1, 3, 5] الفرق: [2]
لتحقق من whether one collection is a subset of another, we can use the containsAll() method. For example,
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); //تحقق من whether primeNumbers هي مجموعة فرعية لـ numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("هل HashSet2 هي مجموعة فرعية لـ HashSet1؟ " + result); } }
نتائج الإخراج
HashSet1: [1, 2, 3, 4] HashSet2: [2, 3] هل HashSet2 هو مجموعة فرعية لHashSet1؟ true
الطريقة | وصف |
---|---|
clone() | إنشاء نسخة من HashSet |
contains() | البحث عن العنصر المحدد في HashSet، وإرجاع النتيجة الصحيحة أو الخاطئة |
isEmpty() | تحقق مما إذا كان HashSet فارغاً |
size() | عدد HashSet |
clear() | إزالة جميع العناصر من HashSet |
في Java، إذا كنا بحاجة إلى الوصول العشوائي إلى العناصر، فإننا نستخدمHashSet عادةً. لأن العناصر في جدول الهشاشة يتم الوصول إليها باستخدام hashcode.
hashcode هو تعريف فريد يساعد في تحديد العناصر في جدول هاشية.
HashSet لا يمكن أن يحتوي على عناصر مكررة. لذلك، لكل عنصر في مجموعة هاشية يوجد hashcode فريد.
ملاحظة: HashSet غير متزامن. أي أن إذا كان عدة متواليات تصل إلى مجموعة هاشية، وكانت إحدى المتواليات تعديل مجموعة هاشية. ثم، يجب عليها أن تكون متزامنة خارجياً.