Tutorial

Java 101 - Array & ArrayList (EP.4)

By Arnon Puitrakul - 23 December 2014 - 1 min read min(s)

Java 101 - Array  & ArrayList (EP.4)

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

int a [] = {1,4,3};

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

int a [2];

จะต้องเขียนเป็น

int a = new int [2];

สังเกตโค๊ตด้านบนนี้ เหมือนกับการสร้าง Object เลยใช่มั้ยครับ จริงๆแล้วมันใช่ เพราะเรามองว่าตัวแปรก็คือ ข้อมูลก้อนนึงเหมือนกัน เหมือนกับที่เรามอง Object เป็นข้อมูลก้อนนึง (ถ้าใคร งง ให้ไปอ่าน EP.2 ก่อนนะครับ ในนั้นเขียนไว้ให้หมดแล้ว)
เอาล่ะเมื่อกี้เรารู้วิธีการสร้าง Array ไปแล้ว เรามาดูวิธีการให้ค่าและการเข้าถึงข้อมูลกัน
เวลาเราจะเข้าถึงข้อมูล เราสามารถเข้าถึงได้ทีล่ะ **Element **(Element = สมาชิก ต่อจากนี้ผมจะใช้คำว่า Element แทน) ถ้าเราต้องการให้ค่ามันก็แค่ สมมุติผมอยากให้ a ตัวที่ 0 เท่ากับ 2 ก็แค่

a[0] = 2;

ง่ายนิดเดียว แต่ถามต่อว่าถ้าเราต้องการให้ค่ามันทั้งหมดเลย เช่นผมอยากให้มันมีค่าเป็น 0 1 2 ไปเรื่อยๆ ทีนี้ผมต้องใช้เรื่องของ Loop เข้ามาช่วยและ (เรื่อง Loop ผมจะไม่อธิบายนะครับเพราะถือว่าควรจะได้แล้ว Syntax เหมือนภาษา C เป๊ะเลย)

for(int i = 0;i< 2;i++)
{
a[i] = i;
}

โค๊ตข้างบนผมบอกว่าให้มันวนลูปตั้งแต่ 0 ถึง 1 แล้วในนั้นผมบอกว่าให้สมาชิกตัวที่ i เท่ากับ i เลย
เพราะฉะนั้น ค่าของ Array ชุดนี้ควรจะเป็น 0 1 ตามลำดับ
ถามต่อ เมื่อกี้เราให้ค่ามันได้แล้ว แล้วเราจะแสดงผลมันยังไงล่ะ
ไม่ยากเลย เราก็ใช้คำสั่ง print ที่เราเรียนมาใน EP.3 แค่

for (int i=0;i<2;i++)
{
System.out.println(a[i]);
}

โค๊ตด้านบนก็คือการให้มันวนลูป เอาค่า a ออกมาทีล่ะค่าปกติเลย ไม่มีอะไร
เอาล่ะถามต่ออีก แล้วถ้าเราไม่รู้ล่ะว่า User จะกรอกจำนวนสมาชิก Array มาเท่าไหร่?
มี 2 วิธีคือ รับค่าจาก User มาเลยว่าจะเอาจำนวน Element ของ Array มาเท่าไหร่ แล้วไปเอาไปแทนในตอนประกาศและตอนวนลูป
แต่มันจะมีอีกวิธีนึง ใน Array มันจะมี Method ตัวนึงอยู่ ชื่อ length ค่าที่ได้ออกมาจากมันคือจำนวน Element ใน Array
สมมุติว่าผมอยูากรู้ว่า Array a มีสมาชิกกี่ตัวผมก็พิมพ์ไปว่า

System.out.println(a.length);

แค่นี้ผมก็จะได้จำนวนสมาชิก Array ออกทางหน้าจอให้เราดูได้แล้ว แต่ถ้าจะเอาค่านี้ไปใช้ได้ก็ได้เหมือนกัน เอาไปปรับกันเอานะ ไม่ยาก (ส่วนเรื่อง Method ของ Array ผมจะไม่พูดต่อล่ะกัน ไม่งั้นเดียวจะยาว)
เรื่องถัดมา เป็นเรื่องย่อยๆของตัว Array นิดหน่อย (ไม่นิดมั่ง) นั่นคือ arrayList
arrayList - มันก็คือ Array นี่แหละ แต่ตอนที่เราใช้ Array เราเคยเจอปัญหาประมาณว่า Array ที่เราประกาศไม่พอมั้ยครับ เจ้านี่แหละมันจะเข้ามาช่วยแก้ปัญหาให้เราได้
**ถามว่าแล้วมันพิเศษกว่า Array ปกติยังไง? **
ArrayList เนี่ยมันไม่ต้องมาระบุจำนวนขนาดเลยเพราะอยากเพิ่มก็เพิ่ม อยากลบก็ลบได้เลย ไม่ต้องแคร์สื่ออะไรทั้งนั้น ส่วนเรื่องขนาด (ขนาดของ Array นะไม่ใช่อย่างอื่น) ก็สามารถเพิ่มได้ไม่จำกัดเลยล่ะ
แต่ก่อนหน้านั้น เราจะต้อง Import ตัวชุดคำสั่งของ ArrayList ก่อน

import java.util.ArrayList;

ส่วนการประกาศก็เหมือนการสร้าง Object หรือไม่ก็การสร้าง Array ด้านบนเลย

ArrayList myArrlis = new ArrayList();

จากด้านบนผมสร้าง ArrayList ชื่อ myArrlis ขึ้นมาตัวนึง ถามต่อว่าเราทำอะไรได้บ้าง
มันจะมี Method อยู่ (เอาที่ใช้บ่อยๆนะ) ดังนี้

  • **add() - **อันนี้ใช้เพิ่มสมาชิก เช่น****myArrlis.add(3); จะเป็นการที่ผมเพิ่มเลข 3 ลงไปใน myArrlis ในตำแหน่งสุดท้ายของ myArrlis แต่ถ้าเราบอกว่า myArrlis.add(0,2); จะเป็นการเพิ่มเลข 2 ลงในตำแหน่งที่ 0 (ถ้าตำแหน่งนั้นมีข้อมูลอยู่แล้วมันจะทับเลยนะ)
  • **remove() - **อันนี้จะเป็นการลบตำแหน่งที่เราต้องการออกจาก ArrayList สมมุติผมบอกว่า myArrlis.remove(0); นั่นคือผมลบ Element ตำแหน่งที่ 0 ออกไป ถ้าสมมุติว่า ผมมีข้อมูลที่เหลืออยู่มันจะขยับมาแทนที่เลยอัตโนมัติ
  • **indexOf() - **เมื่อกี้เราลบไปแล้ว แล้วถ้าเราอยากจะลบข้อมูลที่เราต้องการล่ะ? เจ้า indexOf ช่วยได้ มันจะให้ค่าตำแหน่งกลับมาเมื่อเราให้ข้อมูลที่เราต้องการไป เช่น myArrlis.indexOf(2); มันจะ Return ค่า 0 มาให้ เพราะผมสมมุติว่า 2 อยู่ในตำแหน่งที่ 0 แต่ถ้าเกิดข้อมูลที่เราใส่ไป ไม่มีมันจะ Return ค่ากลับมาเป็น -1 แทน
  • get() - อันนี้จะตรงข้ามกับ indexOf() เมื่อกี้เราให้ค่ากลับเป็นตำแหน่ง แต่อันนี้จะเป็นการให้ตำแหน่งแล้วได้ข้อมูลกลับมา (สลับกัน) myArrlis.get(0); มันก็จะเหมือน arr[0]; ใน Array ปกติเลย
  • **size() - **สุดท้ายคือขนาด Method นี้มันจะ Return ค่ากลับมาเป็นขนาดของ Arraylist มาให้
    วันนี้ก็จบแล้วกับเรื่องของ Array ที่ผมเขียนมาในนี้เป็นเพียงเบื้องต้น ง่ายๆ เท่านั้นนะ จริงๆแล้วมันมีรายละเอียดยิบย่อยอีกเยอะอยู่ ต้องลองไปดูกันเอง ไม่ก็ถ้าว่างเดียวจะเขียนสอนมาอีกนะ เจ๊ะ
    Source Code
    Array : https://drive.google.com/folderview?id=0BwrPA9Miv4o2YUVob290cUJ6Rjg&usp=sharing
    ArrayList : https://drive.google.com/folderview?id=0BwrPA9Miv4o2bUF2d1ZQcHBPT1k&usp=sharing