Friday, February 16, 2007

Spring return LinkList

อาจารย์มะนาว พึ่งเขียน ชื่นชอบสุดๆ
ในนั้นมี link เรื่อง The departure of the hyper-enthusiasts
ที่วิจารณ์พวก ruby + rails ที่กำลังสนุกกันมากไปหน่อย

เรื่องศาสนา กับความชอบ ผมไม่สนใจเท่าไร
ที่สนใจก็คือใน post มี quote ที่พูดถึง container
ว่าทำไม interface ใน List ของ java ไม่มี getLast() แบบที่ ruby มีใน Array

วันนี้อ่าน Sanjiv Jivan 's Blog
เจอ post know how to iterate พูดถึง spingดframework jdbc helper
มัน return List ที่เป็น linkList ออกมา
ถ้าคนไม่รู้ ดันไปใช้คำสั่งพวก
for (int i = 0; i< list.size; i++) {
X x = (X) list.get(i)
}

ถ้า data เยอะมากๆ , แตะหลักแสนเมื่อไร รับรองว่าเจอฝันร้ายด้าน performance แน่นอน

ใน post ได้อ้างถึง benchmark
ลองดูเวลาระหว่าง ArrayList กับ LinkedList

--------------------- ArrayList ---------------------
size add get set iteradd insert remove
10 121 139 191 435 3952 446
100 72 141 191 247 3934 296
1000 98 141 194 839 2202 923
10000 122 144 190 6880 14042 7333
--------------------- LinkedList ---------------------
size add get set iteradd insert remove
10 182 164 198 658 366 262
100 106 202 230 457 108 201
1000 133 1289 1353 430 136 239
10000 172 13648 13187 435 255 23


ส่วนวิธีที่ถูกต้องในการ access LinkList คือใช้ iterator

Related link from Roti

1 comment:

jittat said...

ที่อ่านเจอใน Effective STL อีกอย่างคือ สาเหตุที่ใน list มีคำสั่ง size ที่ไม่จำเป็นต้องทำงานในเวลา O(1) เพราะว่า ต้องการให้คำสั่ง splice ใน list ทำงานได้รวดเร็ว (เพราะว่าไม่ต้องมานับว่าตัดต่อ list ไปกี่ตัวแล้ว -- ตัดต่อได้เลย)

container ที่ออกแบบด้วยแนวคิดเดียวกับ STL การเลือกใช้ให้เหมาะเป็นเรื่องจำเป็นมาก

ตัวอย่างของพี่ป๊อก + ตาราง นี่เห็นภาพเลยจริงๆ