تعريف الواجهة العشوائية في مستند JDK كما يلي: الواجهة العامة العشوائية
فيما يلي ترجمة شرح JDK
تنفذ القائمة واجهة وضع العلامات المستخدمة للإشارة إلى أنه يدعم الوصول العشوائي السريع (عادة ما يكون محددًا). الغرض الرئيسي من هذه الواجهة هو السماح للخوارزميات العامة بتغيير سلوكها ، وبالتالي توفير أداء جيد عند تطبيقه على قوائم الوصول العشوائية أو المستمرة.
عند تطبيق أفضل خوارزمية لتشغيل قوائم الوصول العشوائي (مثل ArrayList) على قائمة وصول مستمرة (مثل LinkedList) ، يمكن إنشاء سلوك المصطلح التربيعي. إذا تم تطبيق خوارزمية على قائمة وصول مستمرة ، فسيتم تشجيعها على استخدام خوارزمية قائمة عامة للتحقق مما إذا كانت قائمة معينة هي مثيل لهذه الواجهة قبل تطبيق خوارزمية قد توفر أداءً ضعيفًا ، وتغيير سلوكها إذا كان الأداء المقبول مطلوبًا.
لقد تم الاعتراف الآن بأن الفرق بين الوصول العشوائي والمستمر غالبًا ما يكون غامضًا. على سبيل المثال ، إذا كانت القائمة كبيرة ، فإن بعض تطبيقات القائمة توفر وقت وصول خطي تدريجي ، ولكنها في الواقع وقت وصول ثابت. يجب أن ينفذ تطبيق القائمة مثل هذه الواجهة عادة.
التأكيد: ما يوصى به في JDK هو تنفيذ واجهة RandomAccess لمجموعات القائمة قدر الإمكان
إذا كانت فئة التجميع عبارة عن تطبيق عشوائي ، فحاول اجتيازه لـ (int i = 0 ؛ i <size ؛ i ++) بدلاً من Iterator iterator.
على العكس من ذلك ، إذا كانت القائمة قائمة تسلسل ، فمن الأفضل التكرار مع التكرار.
من الواضح في JDK أنه في خوارزمية القائمة ، لا سيما الحجم الضخم ، يجب أن نحاول تحديد ما إذا كان ينتمي إلى RandomAccess (مثل ArrayList) أو قائمة التسلسل (مثل LinkedList). لأن خوارزمية اجتياز مناسبة لقائمة RandomAccess مختلفة تمامًا عند استخدامها في قائمة التسلسل. الطريقة الشائعة الاستخدام هي:
لإصدار حكم:
if (مثيل قائمة عشوائي) {for (int m = 0 ؛ m <list.size () ؛ m ++) {}} ell {iterator iter = list.iterator () ؛ بينما (iter.hasnext ()) {}}امتحان:
الفئة العامة testRandomAccess {test public void testtraverse () {ArrayList <integer> ArrayList = new ArrayList <integer> () ؛ LinkedList <integer> LinkedList = New LinkedList <integer> () ؛ initList (ArrayList ، 1000) ؛ initList (LinkedList ، 1000) ؛ System.out.println ("ArrayList يبرز واجهة RandomAccess") ؛ reptrandomaccesstraverse (ArrayList) ؛ // استغرق الأمر 10 مللي ثانية إلى system.out.println ("LinkedList لا تنفذ واجهة RandomAccess") ؛ reprandomaccesstraverse (LinkedList) ؛ . noimplrandomaccesstraverse (ArrayList) ؛ // استغرق الأمر 39 مللي ثانية إلى system.out.println ("LinkedList لا تنفذ واجهة RandomAccess") ؛ noimplrandomaccesstraverse (LinkedList) ؛ // استغرق الأمر 27 مللي ثانية إلى} private long startime = 0 ؛ خاص نهاية الطويل = 0 ؛ // تهيئة قائمة initlist public void (قائمة <integer> ، int n) {for (int i = 0 ؛ i <n ؛ i ++) {list.add (i) ؛ }} // هناك اجتياز لجميع البيانات التي تنفذ واجهة RandomAccess ، public void pressionomaccesstraverse (قائمة قائمة) {StartTime = System.CurrentTimeMillis () ؛ لـ (int count = 0 ؛ count <= 1000 ؛ count ++) {for (int i = 0 ؛ i <list.size () ؛ i ++) {list.get (i) ؛ }} endtime = system.currentTimeMillis () ؛ System.out.println ("استغرق الأمر إجمالي التكرار باستخدام الحلقة" + (endtime - time) + "ms time") ؛ } // اجتياز جميع البيانات دون تنفيذ واجهة عشوائية الفراغ العام noimplrandomaccesstraverse (قائمة) {starttime = system.currentTimeMillis () ؛ لـ (int count = 0 ؛ count <= 1000 ؛ count ++) {for (iterator itr = list.iterator () ؛ itr.hasnext () ؛) {itr.next () ؛ }} endtime = system.currentTimeMillis () ؛ System.out.println ("استغرق الأمر إجمالي التكرارات باستخدام ITerator" + (endtime - time) + "ms time") ؛ }}إن الفهم الشامل المذكور أعلاه لواجهة Java RandomAccess هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.