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มีประเภททั่วไป ประกอบด้วยสองประเภท: ประเภทของคอลเลกชั่นจะถูกระบุก่อน จากนั้นจึงใช้วงเล็บมุมเพื่อระบุประเภทขององค์ประกอบที่จัดเก็บในคอลเลกชั่น
ตัวอย่าง:
| รหัส | คำอธิบาย |
|---|---|
|
รายการจำนวนเต็ม |
|
รายการสตริง |
|
รายการจำนวนจริง |
ไม่เหมือนอาร์เรย์ คอลเล็กชันไม่สามารถเก็บประเภทดั้งเดิมได้ เก็บได้เฉพาะประเภทอ้างอิงเท่านั้น ดังนั้นหากคุณต้องการชุดของints ให้ใช้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