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)

หรือ​ใน​วงเล็บ และ​ยังไ​ม่มีก​ าร​เก็บข​ ้อมูลใ​ด ๆ ลงไ​ป
   10   11   12   13   14   15   16   17   18   19   20