雖然撲克牌接龍能幫助我想像 Linked List 的連接關係,但卻不能完全對應,尤其是「指標」這個概念,越看越覺得抽象。
正好學長來找室友打網球,我便厚著臉皮攔下來請教。
「嘿,你的想法挺有意思。」學長笑著說,「不過我平常是從另一個角度來切入,把相似用途的拿來比較,比如 ArrayList。」
「ArrayList?」我眨了眨眼。
「嗯,ArrayList 的底層其實就是 array,只是它幫你處理了大小不夠的問題。想像一下,你辦活動租了場地,但來的人比預期多,空間不夠了。ArrayList 的做法就是——換個更大的場地,把所有人搬過去。」
「喔,聽起來不錯啊!」
「對,但把人一個個搬過去要花時間啊,而且搬完才能退掉前一個場地,所以那段時間你兩個場地都要付錢。」他笑笑,「至於 LinkedList,就不同了。它不會退掉場地,而是在門口掛一個牌子寫:『滿了,請到下一個場地』。這個牌子就是指標。人們需要先到第一個場地,再跟著牌子去第二個、第三個⋯⋯」
「咦,那最晚來的人要跑好幾個場地啊!」我忍不住驚呼。
「沒錯,這就是 LinkedList 的缺點——查找麻煩。但它的優點是彈性大。如果某個場地出問題,只要換個告示牌就好,不用像 ArrayList 一樣整批搬家。所以插入、刪除這類操作比較方便。」學長語氣輕快的說:「而 ArrayList 的強項就是查找快,因為大家都集中在同一個場地,想找誰一眼就能找到。」