ในการเรียนรู้ที่ผ่านมาเราได้เรียนรู้แต่การดำเนินการกับข้อมูลทีละตัว แต่หากเราต้องการเก็บชุดข้อมูลที่สอดคล้องกัน เช่น รายชื่อพนักงาน เราต้องใช้ตัวแปรหลายตัวตามจำนวนพนักงาน ซึ่งทำให้เกิดความสับสนและเกิดข้อผิดพลาดได้ง่าย ดังนั้นเราจึงใช้อาเรย์ (array) กับการดำเนินการกับชุดของข้อมูล (data collection)

     อาเรย์เป็นการประกาศตัวแปรที่สามารถเก็บข้อมูลได้มากกว่าหนึ่งข้อมูล ให้ลองนึกถึงว่าเรามีกล่องที่มีช่องหลายๆช่อง ซึ่งแต่ละช่องจะบรรจุข้อมูลแต่ละตัว การเก็บข้อมูลของอาเรย์จะเป็นแบบ reference type คือเก็บค่าของที่อยู่ของข้อมูลอีกทีหนึ่ง อาเรย์สามารถเก็บชนิดข้อมูลได้ทั้งที่เป็น primitive data type และ reference data type

     เราประกาศว่าตัวแปรเป็นอาเรย์ด้วยการระบุเครื่องหมาย  [ ]  ตามหลังชนิดข้อมูลที่เราต้องการเก็บในอาเรย์ และสั่งสร้างอาเรย์ด้วยคำสั่ง new ซึ่งต้องระบุขนาดของอาเรย์ด้วย ตัวอย่างเช่น หากเราต้องการสร้างอาเรย์เพื่อเก็บชนิดข้อมูลแบบ int จำนวน 5 ตัว เราประกาศตัวแปรและสั่งสร้างอาเรย์ดังนี้

     หรือเราสามารถเขียนในบรรทัดเดียวกันได้ดังนี้

     เมื่อเราสร้างอาเรย์ขึ้นมาค่าตั้งต้นของอาเรย์สำหรับชนิดข้อมูลที่เป็นตัวเลขคือ 0 ค่าตั้งต้นสำหรับชนิดข้อมูล boolean คือ false และค่าตั้งต้นสำหรับชนิดข้อมูลที่เป็นออบเจกต์คือ null    

     การอ้างอิงค่าในอาเรย์ทำโดยอ้างอิงดัชนี (index) ในอาเรย์ซึ่งจะนับเริ่มจาก 0 เช่น อาเรย์ที่มีสมาชิกจำนวน 5 ตัว จะมีลำดับของดัชนีในการอ้างอิงข้อมูลคือ 0,1,2,3,4 ตามลำดับ

     การกำหนดค่าให้กับแต่ละสมาชิกในอาเรย์ทำได้โดยการอ้างอิงแต่ละสมาชิกโดยใช้ลำดับของดัชนีดังตัวอย่างด้านล่าง

     หรือสามารถกำหนดค่าให้อาเรย์โดยการกำหนดเป็นบล็อกในบรรทัดเดียวกันกับการประกาศตัวแปรก็ได้ดังตัวอย่างด้านล่าง ซึ่งหากกำหนดค่าในลักษณะบล็อกเราไม่ต้องระบุขนาดของอาเรย์เพราะขนาดของอาเรย์จะถูกกำหนดโดยอัตโนมัติจากจำนวนของข้อมูล

     หรือใช้ประโยคคำสั่ง for ในการกำหนดค่าให้กับอาเรย์โดยประกาศตัวแปรกำหนดค่าเริ่มต้นเป็น 0 เนื่องจากดัชนีของอาเรย์เริ่มจาก 0 จากนั้นเพิ่มค่าตัวแปรครั้งละ 1 และใช้เมธอด length() เพื่ออ่านค่าขนาดของอาเรย์จากตัวแปร

อาเรย์ที่สร้างขึ้นมาเพื่อเป็นเงื่อนไขในการตรวจสอบจำนวนครั้งที่ต้องการวนรอบ และในบล็อกของประโยคคำสั่ง for เราจึงกำหนดค่าให้กับแต่ละดัชนีของ

อาเรย์โดยอ้างอิงค่าดัชนีจากตัวแปรกำหนดค่าเริ่มต้น และในการนำข้อมูลในอาเรย์ไปใช้ด้วยคำสั่ง for ก็สามารถทำได้ด้วยวิธีเดียวกัน 

     จากตัวอย่างด้านล่างเป็นการสร้างอาเรย์เพื่อเก็บชนิดข้อมูลแบบ int จำนวน 5 ตัวโดยเก็บอาเรย์ที่ตัวแปร intArray จากนั้นใช้คำสั่ง for เพื่อเก็บข้อมูลที่เกิดจากการเอาดัชนีคูณด้วย 12 และใช้คำสั่ง for เพื่อพิมพ์ข้อมูลในอาเรย์ทั้งหมดออกมา

     การเรียกใช้เมธอด length() ของออบเจกต์อาเรย์จะมีรูปแบบคือ  ชื่อตัวแปร.ชื่อเมธอด  จากตัวอย่างเราเรียกใช้เมธอด length() ซึ่งจะคืนค่าขนาดของ

อาเรย์ โดยการเขียน intArray.length 

     ตัวอย่างด้านล่างเป็นการใช้อาเรย์ในการเก็บออบเจกต์ที่เราสร้างขึ้นมา ตัวอย่างเช่น เราสร้างคลาส Car ขึ้นมา

    จากนั้นเรากำหนดให้คลาส Car เป็นชนิดข้อมูลเพื่อสร้างตัวแปรอาเรย์ดังตัวอย่างในบรรทัดที่ 7 การกำหนดค่าให้กับแต่ละดัชนีในอาเรย์จะเรียกใช้

เมธอดคอนสตรัคเตอร์ของคลาส Car เพื่อสร้างออบเจกต์เก็บไว้ในอาเรย์ดังตัวอย่างในบรรทัดที่ 8, 9 และ 10 (เรื่องการสร้างคลาสและการสร้างออบเจกต์เราจะเรียนรู้กันในหัวข้อถัดๆ สำหรับหัวข้อนี้ให้ทำความเข้าเรื่องอาเรย์เป็นหลัก)

     สำหรับการอ่านข้อมูลของออบเจกต์ Car แต่ละออบเจกต์ที่เก็บในแต่ละดัชนีของอาเรย์ทำได้โดยอ้างถึงดัชนีที่ต้องการและเรียกใช้เมธอด get …  ของคลาส Car ดังตัวอย่างในบรรทัดที่ 12 – 15

     เราสามารถใช้อาเรย์เป็นพารามิเตอร์และสามารถคืนค่าเป็นอาเรย์ได้เช่นเดียวกับชนิดข้อมูลอื่นๆ ดังตัวอย่างด้านล่าง เราสร้างตัวแปรอาเรย์ชื่อ intArray แล้วสร้างเมธอด getArray เพื่อกำหนดค่าในแต่ละดัชนี โดยในเมธอด getArray เราประกาศตัวแปรอาเรย์ tempArray ขึ้นมาเพื่อสร้างอาเรย์และกำหนดข้อมูล จากนั้นจึงคืนค่าตัวแปร tempArray กลับไปยังตัวแปร intArray จากนั้นเราส่งตัวแปรอาเรย์ให้เมธอด printArray เพื่อพิมพ์ค่าออกมา สังเกตุว่าการกำหนดชนิดข้อมูลของพารามิเตอร์ของเมธอด printArray จะต้องระบุชนิดข้อมูลเป็นอาเรย์ด้วย

     ที่ผ่านมาเราพูดถึงอาเรย์แบบ 1 มิติ เท่านั้นคือมีข้อมูลเพียง 1 แถวแต่มีหลายคอลัมน์ แต่อาเรย์สามารถมี 2 มิติ และ 3 มิติได้ ตัวอย่างด้านล่างเป็นอาเรย์แบบ 2 มิติ โดยแต่ละตำแหน่งจะถูกอ้างอิงโดยใช้ดัชนี 2 ตัวคือดัชนีของแถวและดัชนีของคอลัมน์ เช่น แถวที่  0 คอลัมน์ที่ 1 จะอ้างอิงด้วย 0,1  

     การประกาศตัวแปรสำหรับอาเรย์แบบ 2 มิติทำได้โดยกำหนด  [ ] [ ]  ตามหลังชนิดข้อมูลดังตัวอย่างด้านล่าง และในคำสั่ง new ก็ต้องระบุขนาดแถวและคอลัมภ์ของอาเรย์ด้วย

     การอ่านข้อมูลจากอาเรย์แบบ 2 มิติทำได้โดยใช้ประโยคคำสั่ง for ซ้อนกัน 2 ชั้น โดยการอ้างอิงขนาดอาเรย์ด้วยเมธอด length() จะได้ขนาดของแถว และใช้การอ้างอิงจากดัชนีของแถว เช่น int2DArray[0].length เพื่อหาขนาดของคอลัมน์ ตัวอย่างเช่น

     สำหรับอาเรย์ 3 มิติ แต่ละตำแหน่งจะถูกอ้างอิงโดยใช้ดัชนี 3 ตัวคือดัชนีของแถว ดัชนีของคอลัมภ์ และดัชนีของความลึกเช่น แถวที่  0 คอลัมน์ที่ 1 ลึกระดับ 2 จะอ้างอิงด้วย 0,1,2

     การอ่านข้อมูลจากอาเรย์แบบ 3 มิติทำได้โดยใช้ประโยคคำสั่ง for ซ้อนกัน 3 ชั้น โดยการอ้างอิงขนาดอาเรย์ด้วยเมธอด length() จะได้ขนาดของแถว และใช้การอ้างอิงจากดัชนีของแถวเช่น int3DArray[0].lenght เพื่อหาขนาดของคอลัมน์ และใช้การอ้างอิงจากดัชนีของแถวและคอลัมน์เช่น int3DArray[0][2].length เพื่อหาขนาดของความลึก ตัวอย่างเช่น

ข้อควรระวังในการสำเนาอาเรย์

     ข้อแตกต่างระหว่างชนิดข้อมูลแบบ primitive data type และ reference data type คือวิธีการที่ตัวแปรชี้ไปยังพื้นที่เก็บข้อมูลในหน่วยความจำของเครื่องคอมพิวเตอร์ โดยตัวแปรที่มีชนิดข้อมูลแบบ primitive data type หรือเรียกว่า value type ชื่อของตัวแปรจะชี้ไปยังพื้นที่ในหน่วยความจำที่เก็บข้อมูลโดยตรง ส่วนตัวแปรที่มีชนิดข้อมูลแบบ reference data type หรือเรียกว่า referece type ชื่อของตัวแปรจะชี้ไปยังพื้นที่ในหน่วยความจำซึ่งจะเก็บตำแหน่งของพื้นที่ที่เก็บข้อมูลจริงๆอีกทีหนึ่ง

     ดังนั้นเมื่อเราสำเนาข้อมูลของตัวแปรด้วยประโยคคำสั่งในการกำหนดค่าโดยใช้ค่าจากตัวแปรอีกตัวหนึ่ง เช่น int a = b; เพื่อให้ตัวแปร a มีค่าเท่ากับตัวแปร b 

     ในกรณีที่ตัวแปรเป็นชนิดข้อมูลแบบ primitive data type เราจะได้ตัวแปรใหม่ที่ชี้ไปยังข้อมูลที่ถูกสำเนาขึ้นมาใหม่ ดังนั้นตัวแปรทั้งสองตัวเป็นอิสระจากกัน การกระทำกับข้อมูลของตัวแปรตัวใดตัวหนึ่งจะไม่ส่งผลกระทบกับข้อมูลของตัวแปรอีกตัวหนึ่ง 

     แต่ถ้าเป็นการสำเนาตัวแปรที่เป็นชนิดข้อมูลแบบ reference data type สิ่งที่สำเนาไปคือที่อยู่ของข้อมูลไม่ใช่ตัวข้อมูล นั่นหมายถึงตัวแปรทั้งสองตัวก็จะชี้ไปที่ข้อมูลหรือออบเจกต์เดียวกัน ยกเว้นชนิดข้อมูล String ที่ถึงแม้ว่าจะเป็นชนิดข้อมูลแบบ reference type แต่เนื่องจากชนิดข้อมูล String ถูกกำหนดให้แก้ไขไม่ได้ (String เป็น immutable object) จึงมีลักษณะเช่นเดียวกับการสำเนาชนิดข้อมูลแบบ primitive data type  

     เนื่องจากอาเรย์เป็นชนิดข้อมูลแบบ reference data type ดังนั้นการสำเนาข้อมูลจากตัวแปรอาเรย์หนึ่งไปยังอีกตัวแปรอาเรย์หนึ่งโดยใช้การกำหนดค่าให้กับตัวแปร เช่น newIntArray = intArray; จะหมายถึงการเอาชื่อตัวแปรใหม่ชี้ไปยังที่เก็บข้อมูลของตัวแปรที่ต้องการสำเนา ซึ่งก็คือตำแหน่งที่เก็บข้อมูลอีกทีหนึ่ง นั้นหมายถึงทั้ง 2 ตัวแปรชี้ไปที่ข้อมูลหรือออบเจกต์เดียวกัน ดังนั้นการเปลี่ยนแปลงที่เกิดขึ้นกับตัวแปรใหม่จะกระทบกับข้อมูลในตัวแปรเดิม ตัวอย่างเช่น 

     ดังนั้นการสำเนาอาเรย์ให้ได้อาเรย์ใหม่ขึ้นมาจริงๆให้ใช้เมธอดที่ภาษาจาวามีมาให้ดังนี้

    จากตัวอย่างด้านล่างเป็นการใช้เมธอด clone() ในการสำเนาอาเรย์ โดยมีรูปแบบการใช้งานคือ ชื่ออาเรย์ใหม่ = ชื่ออาเรย์ต้นฉบับ.clone() ดังตัวอย่างด้านล่าง

    จากตัวอย่างด้านล่างเป็นการใช้เมธอด System.arraycopy() ในการสำเนาอาเรย์ โดยมีรูปแบบการใช้งานคือ System.arraycopy(ชื่ออาเรย์ต้นฉบับ, ดัชนีเริ่มต้นที่ต้องการสำเนา , ชื่ออาเรย์ใหม่, ดัชนีเริ่มต้นที่ต้องการวางข้อมูล , ขนาดของอาเรย์ใหม่ )  โดยขนาดของอาเรย์ใหม่ไม่จำเป็นต้องเท่ากับอาเรย์ต้นฉบับ ดังตัวอย่างด้านล่าง

     จากตัวอย่างด้านล่างเป็นการใช้เมธอด Arrays.copy0f() ในการสำเนาอาเรย์ โดยมีรูปแบบการใช้งานคือ ชื่ออาเรย์ใหม่ = Arrays.copyof(ชื่ออาเรย์ต้นฉบับ, ขนาดของอาเรย์ใหม่) ซึ่งการใช้เมธอดนี้เราสามารถปรับให้ขนาดของอาเรย์ใหม่เล็กกว่าหรือใหญ่กว่าเดิมได้ โดยข้อมูลที่ถูกสำเนามาจะถูกเก็บตามดัชนีเดิม ดังตัวอย่างด้านล่าง

     ตัวอย่างด้านล่าง เป็นการใช้เมธอด System.arraycopy() ในการสำเนาอาเรย์  สังเกตุว่าเมื่อเราแก้ไขค่าในตัวแปรใหม่ ค่าในตัวแปรเดิมจะไม่เปลี่ยน แสดงว่าอาเรย์ที่สำเนามาเป็นคนละอันกับอาเรย์เดิมจริงๆ

     เราสามารถพิมพ์ข้อมูลในอาเรย์โดยใช้เมธอด Arrays.toString() แต่เมธอดนี้ไม่เหมาะกับอาเรย์ที่มีข้อมูลเยอะๆเท่าไรนัก