อาร์เรย์เป็นหนึ่งในโครงสร้างข้อมูลที่สำคัญสำหรับภาษาการเขียนโปรแกรมทุกภาษา แน่นอนว่าภาษาที่แตกต่างกันนำไปใช้และประมวลผลอาร์เรย์ต่างกัน
อาร์เรย์ที่ระบุในภาษา Java ใช้เพื่อจัดเก็บองค์ประกอบที่มีขนาดคงที่ประเภทเดียวกัน
คุณสามารถประกาศตัวแปรอาร์เรย์ได้ เช่น ตัวเลข[100] แทนที่จะประกาศตัวแปรอิสระ 100 ตัวโดยตรง number0, number1, ...., number99
บทช่วยสอนนี้จะแนะนำให้คุณรู้จักกับการประกาศ การสร้าง และการเริ่มต้นอาร์เรย์ Java และให้โค้ดที่เกี่ยวข้องแก่คุณ
จะต้องประกาศตัวแปรอาร์เรย์ก่อนจึงจะสามารถใช้อาร์เรย์ในโปรแกรมได้ ต่อไปนี้เป็นไวยากรณ์สำหรับการประกาศตัวแปรอาร์เรย์:
dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,但不是首选方法
หมายเหตุ: ขอแนะนำให้ใช้รูปแบบการประกาศ dataType[] arrayRefVar เพื่อประกาศตัวแปรอาร์เรย์ ลักษณะ dataType arrayRefVar[] มาจากภาษา C/C++ และถูกนำมาใช้ใน Java เพื่อให้โปรแกรมเมอร์ C/C++ เข้าใจภาษา Java ได้อย่างรวดเร็ว
นี่คือตัวอย่างโค้ดสำหรับทั้งสองไวยากรณ์:
double[]myList;//首选的方法或doublemyList[];//效果相同,但不是首选方法
ภาษา Java ใช้ตัวดำเนินการใหม่เพื่อสร้างอาร์เรย์ ไวยากรณ์มีดังนี้:
arrayRefVar=newdataType[arraySize];
คำสั่งไวยากรณ์ข้างต้นทำหน้าที่สองสิ่ง:
1. สร้างอาร์เรย์โดยใช้ dataType[arraySize]
2. กำหนดการอ้างอิงของอาร์เรย์ที่สร้างขึ้นใหม่ให้กับตัวแปร arrayRefVar
การประกาศตัวแปรอาร์เรย์และการสร้างอาร์เรย์สามารถทำได้ในคำสั่งเดียว ดังที่แสดงด้านล่าง:
dataType[]arrayRefVar=newdataType[arraySize];
นอกจากนี้ คุณยังสามารถสร้างอาร์เรย์โดยใช้วิธีการต่อไปนี้
dataType[]arrayRefVar={value0,value1,...,valuek};
องค์ประกอบของอาร์เรย์เข้าถึงได้โดยดัชนี การจัดทำดัชนีอาร์เรย์เริ่มต้นที่ 0 ดังนั้นค่าดัชนีจะอยู่ในช่วงตั้งแต่ 0 ถึง arrayRefVar.length-1
จากนั้นเมื่ออาร์เรย์เปิดพื้นที่ คุณสามารถดำเนินการดังต่อไปนี้:
ตัวอย่าง: กำหนดอาร์เรย์ int
public class ArrayDemo { public static void main(String args[]) { int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
นอกเหนือจากการประกาศและการจัดสรรพื้นที่แล้ว อาเรย์เองยังมีโหมดการจัดสรรอื่นอีกด้วย
ตัวอย่าง: ใช้โหมดทีละขั้นตอนเพื่อเปิดพื้นที่อาร์เรย์
public class ArrayDemo { public static void main(String args[]) { int data[] = null; data = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
แต่อย่าลืมว่าอาร์เรย์เป็นประเภทข้อมูลอ้างอิง ดังนั้นจึงต้องจัดสรรพื้นที่ (อินสแตนซ์) ก่อนที่จะใช้อาร์เรย์ หากใช้อาร์เรย์ที่ไม่มีพื้นที่จัดสรร ข้อความ NullPointerException
จะปรากฏขึ้นอย่างแน่นอน:
public class ArrayDemo { public static void main(String args[]) { int data[] = null; System.out.println(data[x]); } }
หลักการนี้เหมือนกับที่อธิบายไว้ก่อนหน้านี้ทุกประการ
อาร์เรย์จะถูกใช้อย่างแน่นอนในระหว่างการพัฒนา แต่การดำเนินการเช่นนี้เกิดขึ้นได้ยาก ในการพัฒนาจริงในอนาคต แนวคิดอาเรย์จะถูกใช้มากขึ้น และเมื่อใช้โดยตรง ในกรณีส่วนใหญ่จะเป็นเพียงเอาท์พุตแบบ for loop
ประเภทองค์ประกอบของอาร์เรย์และขนาดของอาร์เรย์จะถูกกำหนด ดังนั้นเมื่อประมวลผลองค์ประกอบของอาร์เรย์ เรามักจะใช้ลูปพื้นฐานหรือลูป foreach
ตัวอย่างนี้แสดงให้เห็นวิธีการสร้าง เริ่มต้น และจัดการอาร์เรย์อย่างสมบูรณ์:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(inti=0;i<myList.length;i++){ System.out.println(myList[i]+""); } //计算所有元素的总和doubletotal=0; for(inti=0;i<myList.length;i++){ total+=myList[i]; } System.out.println("Totalis"+total); //查找最大元素doublemax=myList[0]; for(inti=1;i<myList.length;i++){ if(myList[i]>max)max=myList[i]; } System.out.println("Maxis"+max); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
1.9 2.9 3.4 3.5 Totalis11.7 Maxis3.5
JDK 1.5 นำเสนอลูปประเภทใหม่ที่เรียกว่า foreach loop หรือ integrated loop ที่ปรับปรุงแล้ว ซึ่งจะวนซ้ำผ่านอาร์เรย์โดยไม่ต้องใช้ตัวห้อย
รูปแบบไวยากรณ์เป็นดังนี้:
for(type element: array){ System.out.println(element); }
ตัวอย่างนี้ใช้เพื่อแสดงองค์ประกอบทั้งหมดในอาร์เรย์ myList:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(doubleelement:myList){ System.out.println(element); } } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
1.9 2.9 3.4 3.5
อาร์เรย์สามารถส่งผ่านเป็นพารามิเตอร์ไปยังวิธีการได้ ตัวอย่างเช่น ตัวอย่างต่อไปนี้คือวิธีการพิมพ์องค์ประกอบในอาร์เรย์ int
publicstaticvoidprintArray(int[]array){ for(inti=0;i<array.length;i++){ System.out.print(array[i]+""); } }
ตัวอย่างต่อไปนี้เรียกเมธอด printArray เพื่อพิมพ์ 3, 1, 2, 6, 4 และ 2:
printArray(newint[]{3,1,2,6,4,2});
publicstaticint[]reverse(int[]list){ int[]result=newint[list.length]; for(inti=0,j=result.length-1;i<list.length;i++,j--){ result[j]=list[i]; } returnresult; }
ในตัวอย่างข้างต้น อาร์เรย์ผลลัพธ์จะถูกใช้เป็นค่าส่งคืนของฟังก์ชัน
คลาส java.util.Arrays สามารถใช้งานอาร์เรย์ได้อย่างสะดวก และวิธีการทั้งหมดที่มีให้เป็นแบบคงที่ มีฟังก์ชั่นดังต่อไปนี้:
กำหนดค่าให้กับอาร์เรย์: ผ่านวิธีการเติม
จัดเรียงอาร์เรย์: ใช้วิธีการเรียงลำดับจากน้อยไปหามาก
เปรียบเทียบอาร์เรย์: ใช้วิธีเท่ากับเพื่อเปรียบเทียบว่าค่าองค์ประกอบในอาร์เรย์เท่ากันหรือไม่
การค้นหาองค์ประกอบอาร์เรย์: วิธีการ binarySearch สามารถดำเนินการค้นหาแบบไบนารีบนอาร์เรย์ที่เรียงลำดับได้
โปรดดูตารางด้านล่างสำหรับคำแนะนำเฉพาะ:
หมายเลขซีเรียล | วิธีการและคำแนะนำ |
---|---|
1 | public static int binarySearch(Object[] a, Object key) ใช้อัลกอริธึมการค้นหาแบบไบนารีเพื่อค้นหาวัตถุที่มีค่าที่กำหนด (Byte, Int, double, ฯลฯ ) ในอาร์เรย์ที่กำหนด ต้องเรียงลำดับอาร์เรย์ก่อนที่จะโทร หากค่าการค้นหามีอยู่ในอาร์เรย์ ให้ส่งคืนดัชนีของคีย์การค้นหา มิฉะนั้นจะส่งคืน (-( จุดแทรก ) - 1) |
2 | บูลีนคงที่สาธารณะเท่ากับ (ยาว[] a, ยาว[] a2) ส่งคืนค่าจริงหากอาร์เรย์ยาวที่ระบุทั้งสอง มีค่าเท่า กัน อาร์เรย์สองตัวจะถือว่าเท่ากันหากมีองค์ประกอบจำนวนเท่ากัน และคู่ขององค์ประกอบที่สอดคล้องกันทั้งหมดในอาร์เรย์ทั้งสองเท่ากัน กล่าวอีกนัยหนึ่ง อาร์เรย์สองตัวจะเท่ากันหากมีองค์ประกอบเดียวกันในลำดับเดียวกัน วิธีการเดียวกันนี้ใช้ได้กับข้อมูลพื้นฐานประเภทอื่นๆ ทั้งหมด (Byte, short, Int ฯลฯ) |
3 | โมฆะสาธารณะเติม (int [] a, int val) กำหนดค่า int ที่ระบุให้กับแต่ละองค์ประกอบในช่วงที่ระบุของอาร์เรย์ประเภท int ที่ระบุ วิธีการเดียวกันนี้ใช้ได้กับข้อมูลพื้นฐานประเภทอื่นๆ ทั้งหมด (Byte, short, Int ฯลฯ) |
4 | public static void sort(Object[] a) เรียงลำดับอาร์เรย์วัตถุที่ระบุตามลำดับจากน้อยไปหามากตามลำดับธรรมชาติขององค์ประกอบ วิธีการเดียวกันนี้ใช้ได้กับข้อมูลพื้นฐานประเภทอื่นๆ ทั้งหมด (Byte, short, Int ฯลฯ) |