คำจำกัดความของอินเทอร์เฟซแบบสุ่มในเอกสาร JDK มีดังนี้: อินเตอร์เฟสสาธารณะแบบสุ่ม
ต่อไปนี้คือการแปลคำอธิบายประกอบของ JDK
รายการใช้อินเทอร์เฟซแท็กที่ใช้เพื่อระบุว่ารองรับการเข้าถึงแบบสุ่ม (ปกติคงที่) วัตถุประสงค์หลักของอินเทอร์เฟซนี้คือการอนุญาตให้อัลกอริทึมทั่วไปเปลี่ยนพฤติกรรมของพวกเขาดังนั้นจึงให้ประสิทธิภาพที่ดีเมื่อนำไปใช้กับรายการการเข้าถึงแบบสุ่มหรือต่อเนื่อง
เมื่อใช้อัลกอริทึมที่ดีที่สุดสำหรับการใช้งานรายการการเข้าถึงแบบสุ่ม (เช่น ArrayList) กับรายการการเข้าถึงอย่างต่อเนื่อง (เช่น LinkedList) พฤติกรรมของคำศัพท์กำลังสองสามารถสร้างได้ หากอัลกอริทึมถูกนำไปใช้กับรายการการเข้าถึงอย่างต่อเนื่องควรใช้อัลกอริทึมรายการทั่วไปเพื่อตรวจสอบว่ารายการที่กำหนดเป็นอินสแตนซ์ของอินเทอร์เฟซนี้ก่อนที่จะใช้อัลกอริทึมที่อาจให้ประสิทธิภาพที่ไม่ดีและเปลี่ยนพฤติกรรมหากจำเป็นต้องมีประสิทธิภาพที่ยอมรับได้
ตอนนี้ได้รับการยอมรับว่าความแตกต่างระหว่างการเข้าถึงแบบสุ่มและต่อเนื่องมักจะคลุมเครือ ตัวอย่างเช่นหากรายการมีขนาดใหญ่การใช้งานรายการบางรายการจะให้เวลาการเข้าถึงเชิงเส้นที่เพิ่มขึ้น แต่เป็นเวลาการเข้าถึงจริง การใช้งานรายการดังกล่าวควรใช้อินเทอร์เฟซนี้
เน้น: สิ่งที่แนะนำใน JDK คือการใช้อินเทอร์เฟซแบบสุ่มสำหรับคอลเลกชันรายการให้มากที่สุด
หากคลาสคอลเลกชันคือการใช้งานแบบสุ่มให้ลองสำรวจด้วย (int i = 0; i <size; i ++) แทนที่จะเป็นตัววนซ้ำ
ในทางกลับกันหากรายการเป็นรายการลำดับจะเป็นการดีที่สุดที่จะทำซ้ำกับตัววนซ้ำ
เป็นที่ชัดเจนใน JDK ว่าในอัลกอริทึมการสำรวจของรายการโดยเฉพาะขนาดใหญ่โดยเฉพาะเราควรพยายามตรวจสอบว่ามันเป็นของแบบสุ่ม (เช่น ArrayList) หรือรายการลำดับ (เช่น LinkedList) เนื่องจากอัลกอริทึมการเดินทางที่เหมาะสมสำหรับรายการแบบสุ่มจึงแตกต่างกันมากเมื่อใช้ในรายการลำดับ วิธีที่ใช้กันทั่วไปคือ:
เพื่อตัดสิน:
if (รายการอินสแตนซ์ของแบบสุ่ม) {สำหรับ (int m = 0; m <list.size (); m ++) {}} else {iterator iter = list.iterator (); ในขณะที่ (iter.hasnext ()) {}}ทดสอบ:
Public Class TestRandomAccess {@Test Public Void TestTraVerse () {ArrayList <Integer> arrayList = arrayList ใหม่ <Integer> (); LinkedList <Integer> linkedList = new LinkedList <integer> (); Initlist (ArrayList, 1,000); InitList (LinkedList, 1,000); System.out.println ("ArrayList ใช้อินเทอร์เฟซแบบ RandomAccess"); ImplrandomaccessTraverse (ArrayList); // ใช้เวลา 10ms ไปยัง System.out.println ("LinkedList ไม่ได้ใช้อินเตอร์เฟสแบบสุ่ม Apprecess"); ImplrandomaccessTraverse (LinkedList); // ใช้เวลา 434ms ไปยัง System.out.println ("/narraylist ไม่ได้ใช้อินเตอร์เฟสสุ่ม Apprecess"); NoimplrandomaccessTraverse (ArrayList); // ใช้เวลา 39ms ไปยัง System.out.println ("LinkedList ไม่ได้ใช้อินเตอร์เฟสสุ่ม Apprecess"); NoimplrandomaccessTraverse (LinkedList); // ใช้เวลา 27ms ถึง} starttime ส่วนตัวส่วนตัว = 0; endtime ส่วนตัวส่วนตัว = 0; // เริ่มต้นรายการโมฆะสาธารณะ INTILLIST (รายการ <Integer> รายการ, int n) {สำหรับ (int i = 0; i <n; i ++) {list.add (i); }} // มีการสำรวจข้อมูลทั้งหมดที่ใช้อินเทอร์เฟซแบบสุ่ม, โมฆะสาธารณะ ImplrandomAccessTraverse (รายการรายการ) {startTime = System.currentTimeMillis (); สำหรับ (int count = 0; count <= 1000; count ++) {สำหรับ (int i = 0; i <list.size (); i ++) {list.get (i); }} endtime = system.currentTimeMillis (); System.out.println ("ใช้การวนซ้ำทั้งหมดโดยใช้ลูป" + (endtime - starttime) + "เวลา MS"); } // การสำรวจข้อมูลทั้งหมดโดยไม่ต้องใช้อินเตอร์เฟสสุ่มตัวอย่างโมฆะสาธารณะ noimplrandomaccessTraverse (รายการรายการ) {starttime = system.currentTimeMillis (); สำหรับ (int count = 0; count <= 1000; count ++) {สำหรับ (iterator itr = list.iterator (); itr.hasnext ();) {itr.next (); }} endtime = system.currentTimeMillis (); System.out.println ("ใช้การวนซ้ำทั้งหมดโดยใช้ตัววนซ้ำ" + (endtime - starttime) + "เวลา MS"); -ความเข้าใจที่ครอบคลุมด้านบนของอินเตอร์เฟส Java RandomAccess เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น