ทุกคนวิจารณ์LinkedList
, คิดเกี่ยวกับคนอื่น ๆ ที่ใช้ List
ใน Java อาจใช้ArrayList
และLinkedList
ส่วนใหญ่เพราะพวกเขาก่อนหน้า Java 6 และเพราะคนเหล่านั้นเป็นคนที่ได้รับการสอนเป็นจุดเริ่มต้นในหนังสือส่วนใหญ่
แต่นั่นไม่ได้หมายความว่าผมจะสุ่มสี่สุ่มห้าใช้LinkedList
'หรือArrayDeque
' s ด้าน หากคุณต้องการที่จะรู้ว่าจะดูที่มาตรฐานด้านล่างทำโดยไบรอัน
การตั้งค่าการทดสอบจะพิจารณาว่า:
- แต่ละวัตถุทดสอบคือสตริง 500 อักขระ แต่ละสตริงเป็นวัตถุที่แตกต่างในหน่วยความจำ
- ขนาดของอาร์เรย์ทดสอบจะมีการเปลี่ยนแปลงระหว่างการทดสอบ
- สำหรับแต่ละชุดขนาด / ชุดคิวคิวการใช้งานจะทำการทดสอบ 100 ครั้งและคำนวณเวลาเฉลี่ยต่อการทดสอบ
- การทดสอบแต่ละครั้งประกอบด้วยการเติมแต่ละคิวด้วยวัตถุทั้งหมดจากนั้นนำออกทั้งหมด
- วัดเวลาในรูปของมิลลิวินาที
ผลการทดสอบ:
- ต่ำกว่า 10,000 องค์ประกอบทั้ง LinkedList และ ArrayDeque ทดสอบโดยเฉลี่ยที่ระดับ 1 มิลลิวินาที
- เมื่อชุดข้อมูลมีขนาดใหญ่ขึ้นความแตกต่างระหว่างเวลาทดสอบ ArrayDeque และ LinkedList โดยเฉลี่ยจะใหญ่ขึ้น
- ที่ขนาดการทดสอบ 9,900,000 องค์ประกอบวิธี LinkedList ใช้เวลานานกว่าวิธี ArrayDeque ประมาณ 165%
กราฟ:
Takeaway:
- หากความต้องการของคุณคือการจัดเก็บองค์ประกอบ 100 หรือ 200 มันจะไม่สร้างความแตกต่างมากโดยใช้ทั้งคิว
- อย่างไรก็ตามหากคุณกำลังพัฒนาบนอุปกรณ์พกพาคุณอาจต้องการใช้
ArrayList
หรือArrayDeque
คาดเดาความจุสูงสุดที่รายการนั้นอาจจำเป็นต้องใช้เนื่องจากข้อ จำกัด ของหน่วยความจำที่เข้มงวด
- มีโค้ดจำนวนมากเขียนโดยใช้
LinkedList
ดอกยางอย่างระมัดระวังเมื่อตัดสินใจใช้ArrayDeque
โดยเฉพาะอย่างยิ่งเพราะไม่ได้ใช้List
อินเทอร์เฟซ (ฉันคิดว่ามันมีเหตุผลใหญ่พอ) อาจเป็นได้ว่าการเจรจา codebase ArrayDeque
ของคุณกับอินเตอร์เฟซรายการอย่างกว้างขวางมากที่สุดอาจและคุณตัดสินใจที่จะกระโดดเข้ากับ การใช้สำหรับการใช้งานภายในอาจเป็นความคิดที่ดี ...