คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/ArrayList.html
ArrayList เป็น RandomAccess
RandomAccess หมายถึง เราเข้าถึง element ในเวลาคงที่เท่ากัน ไม่ว่า element ไหน
หรือ constant-time access
หรือ O(1) access time
ในขณะที่ Linked List ไม่ใช่ RandomAccess ดังนั้นเวลาเข้าถึง element แต่ละตัวไม่คงที่เท่ากัน
แต่การร่น/แทรก/สลับ ทำได้เร็วกว่า RandomAccess เพราะไม่มี memory-move overhead
นั่นคือถ้างานใด ๆ ไม่ได้อ่านค่าจาก container เยอะ แต่ร่น/แทรก/สลับเยอะ ต้องยกให้ Linked List เค้าไป
- ถ้าจะให้เห็นภาพต้องอธิบายด้วยแผนภาพ memory address
- ถ้าจะให้เห็น "ของจริง" อธิบายด้วย machine code ใน godbolt.org
ArrayList เป็น RandomAccess
RandomAccess หมายถึง เราเข้าถึง element ในเวลาคงที่เท่ากัน ไม่ว่า element ไหน
หรือ constant-time access
หรือ O(1) access time
ในขณะที่ Linked List ไม่ใช่ RandomAccess ดังนั้นเวลาเข้าถึง element แต่ละตัวไม่คงที่เท่ากัน
แต่การร่น/แทรก/สลับ ทำได้เร็วกว่า RandomAccess เพราะไม่มี memory-move overhead
นั่นคือถ้างานใด ๆ ไม่ได้อ่านค่าจาก container เยอะ แต่ร่น/แทรก/สลับเยอะ ต้องยกให้ Linked List เค้าไป
- ถ้าจะให้เห็นภาพต้องอธิบายด้วยแผนภาพ memory address
- ถ้าจะให้เห็น "ของจริง" อธิบายด้วย machine code ใน godbolt.org
แสดงความคิดเห็น
อ่านกระทู้อื่นที่พูดคุยเกี่ยวกับ
การพัฒนาซอฟต์แวร์
ความแตกต่าง ระหว่าง nodelink กับ arraylist<class>
//นี่เป็นกระทู้แรกของผมนะครับ