ข้อแตกต่างระหว่างการประกาศตัวแปรประเภท List และ ArrayList

เคยสงสัยกันหรือเปล่าครับว่า ทำไมเขานิยมประกาศตัวแปรประเภท List โดยใช้คำสั่ง

List list = new ArrayList();

ทำไมไม่ประกาศแบบนี้

ArrayList list = new ArrayList();

พูดโดยสรุปคือ

  • วิธีแรก เราจะเห็นจากกระบวนการทำให้เกิด Polymorphism คือเราต้องการแค่ Object ที่เป็น List โดยไม่สนใจว่าจะเป็น List แบบใหน ขอแค่ให้เก็บข้อมูลเป็น List ได้ก็พอ
  • วิธีสอง เราต้องการระบุเจาะจงเพื่อใช้ประโยชน์จาก Class ArrayList

ArrayList มีอะรน่าใช้?

Method ที่เพิ่มเข้ามาใน ArrayList ที่ไม่สามารถพบได้ใน List

  • trimToSize() ถ้าเราเรียก method add จนเต็มความจุเริ่มต้น ArrayList จะทำการขยายขนาด Array ให้ใหญ่ขึ้นโดยมีการเผื่อที่ว่างไว้ให้ด้วย ซึ่งถ้ามีข้อมูลเยอะแล้ว add เกินค่าไปเรื่อยๆ ก็จะยิ่งมีการเผื่อไว้ให้เยอะเกินความจำเป็น ทำให้กิน memory โดยใช่เหตุ ซึ่ง trimToSize() จะทำการตัดส่วนที่เผื่อออกไป ช่วยให้ลดการใช้ memory ลงได้มาก (กรณีที่ ArrayList เผื่อที่ไว้เยอะ)
  • ensureCapacity(int minCapacity) กรณีที่เราไม่สามารถระบุขนาดของ ArrayList ในตอนสร้างได้ เราสามารถใช้ method นี้ในการกำหนดขนาดได้

สรุป

สองอย่างนี้สำหรับผมเรียกว่าช่วยลดการใช้ memory ได้เยอะเลยทีเดียว ลองตัดสินใจดูนะครับว่าข้อมูลที่จะเก็บใน List มากน้อยขนาดใหน ถ้ามากผมขอแนะนำให้ของใช้สอง method นี้แล้วชีวิตจะดีขึ้น

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s