سؤال

وكنت أبحث من خلال وثائق جافا، وجئت عبر أسلوب واضح () من ArrayLists.

ما هي الفائدة من هذا، بدلا من مجرد إعادة توزيع كائن ArrayList جديد إلى متغير؟

هل كانت مفيدة؟

المحلول

ولأن قد يكون هناك إشارات متعددة إلى قائمة واحدة، قد يكون من الأفضل و / أو أكثر عملية لمسحها من إعادة تعيين كافة المراجع.

إذا تفريغ مجموعة الخاصة بك كثيرا (داخل، مثلا، حلقة كبيرة) ليس هناك نقطة خلق الكثير من الكائنات المؤقتة. واثق من جامع القمامة تنظيف في نهاية المطاف لهم ولكن ليس هناك نقطة يجري الإسراف مع الموارد إذا لم يكن لديك ليكون.

ولأن تطهير القائمة العمل أقل من إنشاء واحدة جديدة.

نصائح أخرى

قد يكون لديك حقل النهائي (الطبقة متغير) List:

private final List<Thing> things = ...

وفي مكان ما في الفئة التي تريد مسح (إزالة جميع) الأمور. منذ things نهائي لا يمكن إعادة تعيين. وعلاوة على ذلك، وربما كنت لا تريد إعادة تعيين مثيل قائمة جديدة لديك بالفعل قائمة جيدة تماما إنشاء مثيل.

وتخيل الحالة التي يكون فيها هناك إشارات متعددة من نفس java.util.ArrayList طوال التعليمات البرمجية. وسيكون من شبه المستحيل أو من الصعب جدا لخلق مثيل جديد من القائمة وتعيين لجميع المتغيرات. ولكن هل java.util.ArrayList.clear() خدعة!

وانت لا تدفع أقل مع واضحة مما تفعله مع إنشاء كائن جديد إذا كان الهدف الخاص بك لواضحا حقا.

وتجديد تكليف إشارة إلى عدم مسح الكائن. والافتراض هو أنه إذا كان هناك أي إشارة أخرى إلى ذلك، سيتم استصلاحها من قبل GC في وقت قريب نسبيا. خلاف ذلك، أنت فقط حصلت على نفسك في حالة من الفوضى.

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

واضح () لا تخصيص كائن جديد، لذلك فمن أقل من ضربة الأداء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top