Page 15 - การโปรแกรมคอมพิวเตอร์ขั้นสูง
P. 15
สตริงบิวเดอร์ 2-5
เรอื่ งที่ 2.1.1
คลาสส ตริงบิวเดอร์
คลาสส ตริงบิวเดอร์ (StringBuilder class) ถูกบ รรจุอยู่ในแพ็กเกจของภาษาจ าวาช ื่อ “java.lang.String-
Builder” ส่วนคลาสสตริงบัพเฟอร์ (StringBuffer class) ถูกบรรจุอยู่ในแพ็กเกจของภาษาจาวาชื่อ “java.lang.
StringBuffer” ซึ่งทั้ง 2 คลาสนี้สร้างขึ้นมาสำ�หรับเก็บค่าที่เป็นสตริงเช่นเดียวกันกับคลาสสตริง แต่ว่าคลาสสตริง
นั้นเมื่อถูกสร้างขึ้นมาเป็นออบเจ็กต์แล้วจะไม่สามารถเปลี่ยนแปลงค่าได้ ซึ่งการเปลี่ยนแปลงค่าของออบเจ็กต์สตริง
จะเป็นการสรา้ งออบเจ็กต์ใหม่ขน้ึ มาแทน ตามท่อี ธิบายไว้ในหน่วยท่ี 1 ดงั น้นั ออบเจ็กต์ท่ีเกิดจากคลาสสตรงิ บวิ เดอร์
และคลาสสตริงบัพเฟอร์จะมีความยืดหยุ่นมากกว่าออบเจ็กต์ที่เกิดจากคลาสสตริง นั่นคือ สามารถเพิ่มเติมหรือ
เปลี่ยนแปลงแก้ไขได้ และถ ้าห ากม ีก ารแ ก้ไขสตริงอ ยู่บ่อยๆ และแ ก้ไขเป็นจำ�นวนม าก แนะนำ�ให้ใช้ 2 คลาสดังกล่าวนี้
จะมีประสิทธิภาพมากกว่าก ารใช้ค ลาสส ตริง
คลาสส ตริงบิวเดอ ร์แ ละค ลาสส ตริงบัพเฟอร์ม ีความคล้ายคลึงก ันมาก คือ เมธอดที่ม ีส ามารถใช้ง านท ดแทน
กันได้โดยเปลี่ยนเฉพาะชื่อของคลาสเท่านั้น ซึ่งคลาสสตริงบิวเดอร์ถูกสร้างขึ้นมาใหม่ตั้งแต่ JDK 1.5 เป็นต้นมา
ความแตกต่างจากคลาสสตริงบัพเฟอร์คือ คลาสสตริงบิวเดอร์จะไม่ทำ�การประสานเวลา (synchronization) กัน
ระหว่างเทรด (thread) กรณีท ี่ม ีมากกว่า 1 เทรด ซึ่งทำ�ให้ม ีประสิทธิภาพแ ละม ีค วามเร็วในการท ำ�งานส ูงกว่าค ลาส-
สตริงบ ัพเฟอร์มาก แต่ค ลาสสตริงบิวเดอร์เหมาะก ับง านท ี่ม ีเพียงเทรดเดียวเท่านั้น ซึ่งถ ้าห ากง านใดมีม ากกว่า 1 เทรด
แนะนำ�ใหใ้ชค้ ลาสส ตริงบ พั เฟอรแ์ ทนจ ะด กี วา่ ส่วนก ารเรียกใชง้ านใชไ้ ดเ้ หมอื นก ัน สำ�หรบั ในห น่วยน จี้ ะเนน้ ไปท ีค่ ลาส-
สตริงบิวเดอ ร์ เป็นหลัก
คลาสสตริงบิวเดอร์ ประกอบด้วย คอนส ตรัคเทอร์และเมธอดจ ำ�นวนมาก ในหน่วยน ี้จึงไม่สามารถอธิบาย
หรือยกต ัวอย่างได้ทั้งหมด เพียงแค่อ ธิบายและยกตัวอย่างบางส ่วนท ี่ม ีค วามสำ�คัญและมีการใช้ง าน บ่อยๆ เท่านั้น
1. การส ร้างออบเจ็กตจ์ ากคลาสส ตรงิ บวิ เดอร์
คลาสสตริงบิวเดอร์ ประกอบด้วย คอนส ตรัคเทอร์จ ำ�นวน 3 คอนส ตรัคเทอร์ ที่ใช้ส ำ�หรับสร้างเป็นอ อบเจ็กต์
ซึ่งมีร ายล ะเอียดและร ูปแบบดังนี้
รูปแ บบท่ี 1 StringBuilder()
โดย
คอนสตรัคเทอร์น ี้จ ะส ร้างค วามจุว ่างเปล่าข นาด 16 ช่อง โดยยังไม่มีการเก็บข้อม ูลใดๆ ลงไป
รูปแ บบท ี่ 2 StringBuilder(int capacity)
โดย
คอนสตรัคเทอร์นี้จะสร้างความจุว่างเปล่าขนาดตามจำ�นวนที่ระบุเอาไว้ในอาร์กิวเมนต์ (argument)
หรือในวงเล็บ และยังไม่มีก ารเก็บข ้อมูลใด ๆ ลงไป