باستخدام مجموعات API إلى المراوغة
-
05-07-2019 - |
سؤال
وأنا محبط جدا لأنني لا يمكن أن يبدو لمعرفة لماذا مجموعات خلط لا يعمل بشكل صحيح.
ودعونا نقول أن أحاول لخلط مجموعة randomizer
.
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
لسبب البقاء فرز العناصر بالضبط نفس الشيء أم لا أسميه أسلوب المراوغة. أيه أفكار؟
المحلول
وArrays.asList
لا يمكن استخدامها مع صفائف من الأوليات. استخدام هذا بدلا من ذلك:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
ونفس القاعدة تنطبق على معظم الفئات في إطار مجموعات، في أنه لا يمكنك استخدام أنواع بدائية.
والرمز الأصلي (مع int[]
) جمعت ما يرام، ولكن لم يعمل على النحو المنشود، بسبب سلوك طريقة asList
variadic: انها مجرد يجعل قائمة عنصر واحد، مع مجموعة int
بصفتها عضوا الوحيد
نصائح أخرى
وكريس الجواب الصحيح.
وكما قلت في تعليق على الجواب كريس، ومجموعة الأساسية الخاصة بك تتغير بشكل مناسب ما لم يحتاج arraylist في النمو، والقائمة يخلق العناصر واحد ونسخ جديدة فيه.
وأنت قد ترغب في الاحتفاظ إشارة إلى القائمة وأعاد على أنه بعد الدعوة Arrays.asList، وليس تكرار عبر مجموعة بعد ذلك، أعاد على القائمة بدلا من ذلك.