هل توجد بنية تجزئة java مع مفاتيح فقط ولا توجد قيم؟



كيفية ربط الجافا بقاعدة البيانات (4)

راجع أيضًا الأساليب الثابتة Collections#newSetFromMap التي تنشئ مجموعة استنادًا إلى تطبيق الخريطة المحدد. هذا هو على سبيل المثال في متناول اليد لخلق مجموعة التجزئة ضعيفة.

أنا أبحث عن هيكل يشطر مفاتيح دون الحاجة إلى قيمة. عند الاستعلام عنها ، يجب أن تعود إلى true إذا تم العثور على المفتاح و false. أنا أبحث عن شيء مماثل ل Hashtable<MyClass, Boolean> باستثناء الإدراج يتطلب سوى مفتاح والاستعلامات فقط من أي وقت مضى ترجح صواب أو خطأ ، أبدا خالية.


أنت في حاجة إلى Java HashSet .

الوصف من الوثائق الرسمية هو:

تطبق هذه الفئة واجهة Set ، المدعومة بجدول هاش (في الواقع نسخة HashMap). لا تقدم أي ضمانات بشأن ترتيب تكرار المجموعة ؛ على وجه الخصوص ، لا يضمن أن يظل الأمر ثابتًا بمرور الوقت. يسمح هذا الفصل العنصر الفارغ.

يقدم هذا الفصل أداءً ثابتًا للوقت للعمليات الأساسية (إضافة وإزالة وحجم وحجم) ، بافتراض أن وظيفة التجزئة تشتت العناصر بشكل صحيح بين الجرافات. يتطلب تكرار هذه المجموعة وقتًا يتناسب مع مجموع حجم مثيل HashSet (عدد العناصر) بالإضافة إلى "سعة" مثيل HashMap الخلفي (عدد المجموعات). وبالتالي ، من المهم جدًا عدم تعيين سعة أولية عالية جدًا (أو أن عامل التحميل منخفض جدًا) إذا كان أداء التكرار مهمًا.

لاحظ أن هذا التنفيذ غير متزامن. إذا كان هناك عدة سلاسل من الوصول إلى مجموعة تجزئة بشكل متزامن ، وتقوم واحدة على الأقل من مؤشرات الترابط بتعديل المجموعة ، فيجب أن تتم مزامنتها خارجيًا. يتم تحقيق ذلك عادة عن طريق المزامنة على بعض الكائنات التي تغلف المجموعة بشكل طبيعي. في حالة عدم وجود مثل هذا الكائن ، يجب أن تكون المجموعة "ملفوفة" باستخدام طريقة Collections.synchronizedSet. من الأفضل القيام بذلك في وقت الإنشاء ، لمنع الوصول غير المتزامن غير المقصود إلى المجموعة:

Set s = Collections.synchronizedSet (New HashSet (...))؛

إن التكرارات التي يتم إرجاعها بواسطة طريقة تكرار هذا الفصل تكون سريعة الفشل: إذا تم تعديل المجموعة في أي وقت بعد إنشاء المكرّر ، وبأية طريقة إلا من خلال طريقة إزالة المكرر الخاصة به ، يقوم Iterator بطرح ConcurrentModificationException. وبالتالي ، في مواجهة التعديل المتزامن ، يفشل المكرر بسرعة ونزاهة ، بدلاً من المخاطرة بالسلوك التعسفي غير الحتممي في وقت غير محدد في المستقبل.

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

هذا الفصل هو عضو في Java Collections Framework.


java.util.HashSet؟ باستخدام يحتوي على () لبحثك.


تم تصميم Java Set لإزالة التكرارات ونأمل أن يكون HashMap يستخدم Java Set داخليًا لإدارة المفتاح ، حيث لا يمكن للمفاتيح أبدًا أن تحتوي على نسخ مكررة ، لذا يجب أن تفكر في تعيين المتطلبات الخاصة بك.





collections