1.Arrays.fill()
เมื่อทำงานกับอาร์เรย์ โปรแกรมเมอร์ Java มักจะต้องเติมอาร์เรย์ด้วยค่าเดียวกัน แน่นอน คุณสามารถเขียนลูปและกำหนดค่าให้กับแต่ละเซลล์ของอาร์เรย์ในลูปได้:
int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;
หรือคุณสามารถเรียกArrays.fill()
เมธอดซึ่งทำสิ่งเดียวกันทุกประการ: มันเติมอาร์เรย์ที่ส่งผ่านด้วยค่าที่ส่งผ่าน นี่คือลักษณะ:
Arrays.fill(name, value)
และโค้ดในตัวอย่างด้านบนสามารถทำให้กระชับและชัดเจนขึ้นอีกเล็กน้อย:
int[] x = new int[100];
Arrays.fill(x, 999);
นอกจากนี้คุณยังสามารถใช้Arrays.fill()
เมธอดเพื่อเติมอาร์เรย์ทั้งหมด แต่เพียงบางส่วนด้วยค่าบางอย่าง:
Arrays.fill(name, first, last, value)
ที่แรกและสุดท้ายคือดัชนีของเซลล์แรกและเซลล์สุดท้ายที่จะเติม
ตัวอย่าง:
|
เรากำลังเติมเซลล์ x[3] , x[4] , x[5] , และด้วยx[6] ค่า 999 เซลล์ของอาร์เรย์มีหมายเลขเริ่มต้นจากศูนย์! ตัวแปร str ประกอบด้วยค่า:
|
วิธี นี้Arrays.fill()
ใช้ได้กับอาร์เรย์หนึ่งมิติเท่านั้น หากคุณส่งผ่านอาร์เรย์สองมิติไปยังเมธอด จะถือว่าเป็นหนึ่งมิติพร้อมกับผลที่ตามมาทั้งหมด
2.Arrays.copyOf()
ดังที่คุณทราบแล้ว คุณไม่สามารถปรับขนาดอาร์เรย์ได้หลังจากที่สร้างเสร็จแล้ว
แต่ถ้าคุณต้องการจริงๆล่ะ
ถ้าคุณต้องการจริงๆ คุณก็ทำได้!
- สร้างอาร์เรย์ใหม่ตามความยาวที่ต้องการ
- คัดลอกองค์ประกอบทั้งหมดจากอาร์เรย์แรกลงไป
โดยวิธีการนี้เป็นสิ่งที่Arrays.copyOf()
วิธีการทำ นี่คือสิ่งที่เรียกว่า:
Type[] name2 = Arrays.copyOf(name, length);
วิธีนี้ไม่ได้เปลี่ยนอาร์เรย์ที่มีอยู่แต่สร้างอาร์เรย์ใหม่ แทน และคัดลอกองค์ประกอบของอาร์เรย์เก่าลงไป
หากองค์ประกอบไม่พอดี ( ความยาวน้อยกว่าความยาวของอาร์เรย์ที่มีอยู่ ) ค่าพิเศษจะถูกละเว้น
ถ้าความยาวของอาร์เรย์ใหม่มากกว่าความยาวของอาร์เรย์เก่า เซลล์จะเต็มไปด้วยเลขศูนย์
ตัวอย่าง:
|
ตัวแปร str2 ประกอบด้วยค่า:
ตัวแปร str3 ประกอบด้วยค่า:
|
3.Arrays.copyOfRange()
และถ้าคุณต้องการรับอาร์เรย์ที่มีความยาว 5 จากอาร์เรย์ที่มีความยาว 10 แต่คุณต้องการให้มีองค์ประกอบ 5 รายการสุดท้ายมากกว่า 5 รายการแรก
ในกรณีนี้ วิธีอื่นของArrays
คลาสจะมีประโยชน์ นั่นคือArrays.copyOfRange()
. นี่คือลักษณะเมื่อเราเรียกมันว่า:
Type[] name2 = Arrays.copyOfRange(name, first, last);
วิธีนี้ยังสร้างอาร์เรย์ใหม่ แต่เติมด้วยองค์ประกอบจากตำแหน่งที่กำหนดในอาร์เรย์เดิม โดยที่ตัวแรกและตัวสุดท้ายคือดัชนีขององค์ประกอบตัวแรกและตัวสุดท้ายที่ควรใส่ในอาร์เรย์ใหม่
ตัวอย่าง:
|
ตัวแปร str2 ประกอบด้วยค่า:
ตัวแปร str3 ประกอบด้วยค่า:
|
4.Arrays.sort()
อา การรักษาที่อร่อยที่สุด: การเรียงลำดับ อาร์เรย์ถูกจัดเรียงค่อนข้างบ่อยในการเขียนโปรแกรม การกระทำที่พบบ่อยที่สุดสามประการเมื่อทำงานกับอาร์เรย์คือ:
- การเรียงลำดับอาร์เรย์
- การค้นหาองค์ประกอบต่ำสุด (หรือสูงสุด) ของอาร์เรย์
- การกำหนดดัชนีขององค์ประกอบในอาร์เรย์ (การค้นหาองค์ประกอบในอาร์เรย์)
นี่เป็นเหตุผลว่าทำไมผู้สร้างของ Java จึงรวมsort()
วิธีการไว้ในArrays
คลาส นี่คือสิ่งที่เรียกว่า:
Arrays.sort(name);
วิธีนี้จะเรียงลำดับอาร์เรย์ที่ส่งผ่านจากน้อยไปหามาก
ตัวอย่าง:
|
ตัวแปร str ประกอบด้วยค่า:
|
ยอดเยี่ยมใช่มั้ย คุณเรียกใช้เมธอดหนึ่ง และตอนนี้คุณมีอาร์เรย์ที่เรียงลำดับแล้ว สวย.
อย่างไรก็ตาม คุณสามารถใช้วิธีนี้เพื่อจัดเรียงไม่เฉพาะอาร์เรย์ทั้งหมด แต่เพียงบางส่วนเท่านั้น นี่คือสิ่งที่เรียกว่า:
Arrays.sort(name, first, last);
โดยที่ตัวแรกและตัวสุดท้ายคือดัชนีของเซลล์แรกและเซลล์สุดท้ายที่การเรียงลำดับควรสัมผัส
ตัวอย่าง:
|
ตัวแปร str ประกอบด้วยค่า:
|
ในการจัดเรียงอาร์เรย์ Java ใช้อัลกอริทึมการเรียงลำดับที่เร็วที่สุด— QuickSort ความซับซ้อนในการคำนวณขึ้นอยู่กับขนาดของอาร์เรย์และคำนวณโดยใช้สูตร N log(N)
การจัดเรียงอาร์เรย์ขององค์ประกอบ 1,000 รายการจะเกี่ยวข้องกับการเปรียบเทียบองค์ประกอบอาร์เรย์ประมาณ 3,000 รายการ การจัดเรียงอาร์เรย์ขององค์ประกอบหนึ่งล้านรายการจะเกี่ยวข้องกับการเปรียบเทียบประมาณ 6 ล้านรายการ
5.Arrays.binarySearch()
และวิธีการสุดท้ายที่น่าสนใจที่สุดของArrays
คลาสคือสามารถค้นหาค่าที่กำหนดในอาร์เรย์ นี่ไม่ใช่การค้นหาทั่วไป — เป็นการค้นหาไบนารี อันเป็นที่ รัก มันเดือดลงไปนี้:
- ขั้นแรกให้จัดเรียงอาร์เรย์
- จากนั้นองค์ประกอบตรงกลางของอาร์เรย์จะถูกเปรียบเทียบกับองค์ประกอบที่เรากำลังมองหา
- หากองค์ประกอบมากกว่าองค์ประกอบตรงกลาง การค้นหาจะดำเนินต่อไปในครึ่งขวาของอาร์เรย์
- หากองค์ประกอบที่เรากำลังมองหาน้อยกว่าองค์ประกอบตรงกลาง การค้นหาจะดำเนินต่อไปในครึ่งซ้ายของอาร์เรย์
เนื่องจากการจัดเรียงอาร์เรย์จึงเป็นไปได้ที่จะกำจัดครึ่งหนึ่งในการเปรียบเทียบครั้งเดียว จากนั้นในขั้นต่อไป เราก็โยนทิ้งอีกครึ่งหนึ่ง ไปเรื่อยๆ
วิธีการนี้ทำให้การค้นหาแบบไบนารีรวดเร็วมาก ในอาร์เรย์ที่มีองค์ประกอบหนึ่งล้าน (!) สามารถค้นหาดัชนีขององค์ประกอบที่ต้องการได้ในการเปรียบเทียบเพียง 20 รายการ ข้อบกพร่องของแนวทางคือต้องเรียงลำดับอาร์เรย์ก่อน และการเรียงลำดับยังต้องใช้เวลาอีกด้วย
นี่คือสิ่งที่เรียกว่า:
int index = Arrays.binarySearch(name, value);
name
ชื่อของอาร์เรย์ซึ่งจะต้องผ่านการจัดเรียงแล้วอยู่ที่ไหน (เช่น ใช้ Arrays.sort()
เมธอด) และvalue
เป็นองค์ประกอบที่เรากำลังค้นหาในอาร์เรย์ ผลลัพธ์ที่ส่งคืนโดยเมธอดคือดัชนีขององค์ประกอบอาร์เรย์ที่ต้องการ
ตัวอย่าง:
|
x เป็น:
4 1 (ดัชนี0 และ2 เป็นที่ยอมรับด้วย)8 -7 |
หากอาร์เรย์มีหลายอินสแตนซ์ขององค์ประกอบที่กำลังค้นหา อัลกอริทึมจะส่งกลับดัชนีของหนึ่งในนั้น (ไม่มีการรับประกันว่ามันจะเป็นรายการแรกหรือกลับกัน — รายการสุดท้ายเหล่านี้ องค์ประกอบที่ซ้ำกัน)"
หากไม่พบองค์ประกอบในอาร์เรย์ ดัชนีจะเป็นค่าลบ
6. ลิงก์ไปยังเอกสาร Oracle ในArrays
ชั้นเรียน
หากคุณสนใจเป็นพิเศษ คุณสามารถอ่านทุกอย่างเกี่ยวกับArrays
คลาสและวิธีการทั้งหมดในเอกสารอย่างเป็นทางการที่ href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base /java/util/Arrays.html">บนเว็บไซต์ Oracle
ตัวอย่างเช่น คุณสามารถอ่านเกี่ยวกับวิธีการArrays.mismatch()
และ Arrays.compare()
บางทีคุณจะพบว่ามันมีประโยชน์อย่างใด
และอย่าสับสนกับจำนวนวิธี แต่ละวิธีมี 5-10 ตัวแปร ซึ่งแตกต่างกันในประเภทพารามิเตอร์เท่านั้น
GO TO FULL VERSION