1. ArrayList
ชั้นเรียน
วันนี้เราจะสำรวจArrayList
ชั้นเรียน นี่เป็นคลาสแรกจากหลายๆ คลาสที่รู้จักกันในชื่อคอลเลกชัน ใน Java คอลเล็กชันเป็นหัวข้อที่กว้างและมีประโยชน์ ซึ่งภารกิจทั้งหมดของ CodeGym จะอุทิศให้กับคอลเล็กชันเหล่านี้
เพื่อให้เข้าใจอย่างถ่องแท้ว่าคอลเล็กชันมีโครงสร้างอย่างไรและความแตกต่างทั้งหมด คุณต้องเรียนรู้ OOP, อินเทอร์เฟซ, การสืบทอด, พื้นฐานของมัลติเธรด และอื่นๆ อีกมากมายก่อน
ดังนั้นวันนี้เราจะทำความคุ้นเคยกับคอลเลกชันที่ง่ายที่สุด แต่ในระดับที่ลึกพอที่คุณจะเข้าใจวิธีการใช้งานและวิธีการทำงาน แล้วมาพบกับArrayList
คอลเลคชั่น
เรื่องราวเบื้องหลัง
ฉันจะเริ่มต้นด้วยพื้นหลังเล็กน้อย โปรแกรมเมอร์ไม่ชอบแง่มุมหนึ่งของอาร์เรย์: ข้อเท็จจริงที่ว่าขนาดไม่สามารถเปลี่ยนแปลงได้ จะทำอย่างไรถ้าคุณต้องการจัดเก็บองค์ประกอบอีกสามรายการในอาร์เรย์ แต่มีเซลล์ว่างเพียงเซลล์เดียว
ทางออกเดียวสำหรับข้อจำกัดด้านพื้นที่ของอาร์เรย์คือการสร้างอาร์เรย์ขนาดใหญ่มากเพื่อรองรับองค์ประกอบทั้งหมดที่คุณอาจจำเป็นต้องจัดเก็บ แต่นี่มักจะเป็นการสูญเสียความทรงจำ หากอาร์เรย์มักมีองค์ประกอบสองหรือสามองค์ประกอบ แต่มีโอกาสเพียงเล็กน้อยที่จะต้องจัดเก็บองค์ประกอบเหล่านั้น 100 รายการ ดังนั้นจำเป็นต้องสร้างอาร์เรย์ที่มีความจุ 100 รายการ
แล้วโปรแกรมเมอร์คิดอย่างไร? พวกเขาเขียนArrayList
ชั้นเรียนซึ่งทำงานเหมือนกับArray
ชั้นเรียน แต่ปรับขนาดได้
คลาส ArrayList
ชื่อของArrayList
คลาสประกอบด้วยคำสองคำ: Array + List Array
เป็นอาร์เรย์และList
เป็นรายการ
แต่ละArrayList
วัตถุมีอาร์เรย์ขององค์ประกอบทั่วไป เมื่อคุณอ่านองค์ประกอบจาก วัตถุArrayList
จะดึงข้อมูลจากอาร์เรย์ภายใน เมื่อคุณเขียนองค์ประกอบ องค์ประกอบจะเขียนไปยังอาร์เรย์ภายใน
คลาส ArrayList ไม่มีข้อเสียทั้งหมดที่อาร์เรย์มี มันรู้วิธีการ:
- เก็บองค์ประกอบของประเภทเฉพาะ
- ปรับขนาดรายการแบบไดนามิก
- เพิ่มองค์ประกอบที่ส่วนท้ายของรายการ
- แทรกองค์ประกอบที่จุดเริ่มต้นหรือตรงกลางของรายการ
- ลบองค์ประกอบออกจากที่ใดก็ได้ในรายการ
สำหรับรายละเอียดเพิ่มเติม ดูด้านล่าง:
2. การสร้างArrayList
วัตถุ
ในการสร้างArrayList
วัตถุ คุณต้องเขียนโค้ดดังนี้:
ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();
ArrayList
ประเภทคอลเล็กชัน/คลาสอยู่ที่ไหนTypeParameter
คือประเภทขององค์ประกอบที่จัดเก็บไว้ในArrayList
คอลเล็กชัน และname
เป็นชื่อของArrayList<TypeParameter>
ตัวแปร
ตัวแปรname
มีประเภททั่วไป ประกอบด้วยสองประเภท: ประเภทของคอลเลกชั่นจะถูกระบุก่อน จากนั้นจึงใช้วงเล็บมุมเพื่อระบุประเภทขององค์ประกอบที่จัดเก็บในคอลเลกชั่น
ตัวอย่าง:
รหัส | คำอธิบาย |
---|---|
|
รายการจำนวนเต็ม |
|
รายการสตริง |
|
รายการจำนวนจริง |
ไม่เหมือนอาร์เรย์ คอลเล็กชันไม่สามารถเก็บประเภทดั้งเดิมได้ เก็บได้เฉพาะประเภทอ้างอิงเท่านั้น ดังนั้นหากคุณต้องการชุดของint
s ให้ใช้Integer
คลาส wrapper แทน
3. การดำเนินการกับArrayList
ในขั้นต้น ความยาวของรายการที่สร้างขึ้นใหม่จะเป็นศูนย์ เนื่องจากมีองค์ประกอบ 0 รายการ หากคุณเพิ่มองค์ประกอบหนึ่งรายการลงในรายการ ความยาวจะเพิ่มขึ้น 1 รายการ หากคุณลบองค์ประกอบที่เพิ่มเข้าไป ความยาวจะลดลงกลับเป็นศูนย์
ตารางต่อไปนี้สามารถสอนคุณเพิ่มเติมเกี่ยวกับวิธีการของArrayList
ชั้นเรียน:
วิธีการ | คำอธิบาย |
---|---|
|
เพิ่มองค์ประกอบที่ส่งผ่านไปยังรายการ |
|
เพิ่มองค์ประกอบไปยังตำแหน่งเฉพาะในรายการ |
|
ส่งกลับองค์ประกอบที่มีดัชนีindex |
|
กำหนดvalue ให้กับองค์ประกอบที่มีดัชนีindex |
|
ลบองค์ประกอบที่มีดัชนีindex เป็น ส่งกลับองค์ประกอบที่ถูกลบ |
|
ลบองค์ประกอบที่คุณส่งผ่านไปยังวิธีการ หากมีมากกว่าหนึ่งองค์ประกอบ องค์ประกอบแรกจะถูกลบออก |
|
ล้างรายการ กล่าวคือลบองค์ประกอบทั้งหมดออกจากรายการ |
|
ตรวจสอบว่ารายการvalue มี |
|
ตรวจสอบว่ารายการว่างเปล่าหรือไม่ กล่าวอีกนัยหนึ่ง ความยาวของรายการเป็นศูนย์หรือไม่ |
|
ส่งกลับขนาดของรายการ เช่น จำนวนองค์ประกอบในรายการ |
|
ส่งกลับอาร์เรย์ที่มีองค์ประกอบของรายการ คุณต้องส่งอาร์เรย์ไปยังเมธอด |
วิธีการเหล่านี้ช่วยให้คุณทำเกือบทุกอย่างที่คุณต้องการกับรายการ: สลับองค์ประกอบ เพิ่มองค์ประกอบ และลบองค์ประกอบ คุณสามารถล้างรายการได้ด้วยคำสั่งเดียว หรือแม้แต่แปลงรายการเป็นอาร์เรย์
4. การเปรียบเทียบArrayList
และArray
ฉันไม่คิดว่าเราจะหลีกเลี่ยงการเปรียบเทียบArrayList
และอาร์เรย์ไม่ได้
มีเพียง 4 การกระทำที่คุณสามารถทำได้กับอาร์เรย์:
- สร้างอาร์เรย์
- รับองค์ประกอบตามดัชนี
- ตั้งค่าองค์ประกอบตามดัชนี
- รับความยาวของอาร์เรย์
นี่คือการดำเนินการเหล่านี้เมื่อนำไปใช้กับอาร์เรย์และArrayList
:
อาร์เรย์ | รายการอาร์เรย์ |
---|---|
|
|
|
|
|
|
|
|
ลองเปรียบเทียบวิธีArrayList
การทำงานของอาร์เรย์กับวิธีการทำงานของอาร์เรย์ ตัวอย่างเช่น ลองใช้งานนี้: "อ่าน 10 สตริงจากแป้นพิมพ์และแสดงบนหน้าจอในลำดับย้อนกลับ"
การใช้อาร์เรย์ | การใช้ ArrayList |
---|---|
|
|
การเปรียบเทียบมีความชัดเจน ทุกอย่างสั้นลงและชัดเจนขึ้นสำหรับอาร์เรย์ แต่ArrayList
ก็ไม่ใช่เรื่องยากเช่นกัน เพื่อให้ได้องค์ประกอบ เราใช้get()
วิธี; เปลี่ยนองค์ประกอบ วิธีset()
การ; เพื่อให้ได้ความยาวของรายการsize()
วิธีการ
เหตุใดโปรแกรมเมอร์จึงใช้ArrayList
คลาส
ประเด็นทั้งหมดคือวิธีการอื่น ๆ ทั้งหมดที่อาร์เรย์ธรรมดาไม่มี:
- เพิ่มองค์ประกอบในรายการ
- เพิ่มองค์ประกอบที่ตรงกลางของรายการ
- ค้นหาองค์ประกอบในรายการ
- การลบองค์ประกอบออกจากรายการ
GO TO FULL VERSION