Tutorial

Java 101 - Array & ArrayList (EP.4)

By Arnon Puitrakul - 24 ธันวาคม 2014

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

Read Next...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

เวลาเราทำงานกับข้อมูลอย่าง Pandas DataFrame หนึ่งในงานที่เราเขียนลงไปให้มันทำคือ การ Apply Function เข้าไป ถ้าข้อมูลมีขนาดเล็ก มันไม่มีปัญหาเท่าไหร่ แต่ถ้าข้อมูลของเราใหญ่ มันอีกเรื่องเลย ถ้าเราจะเขียนให้เร็วที่สุด เราจะทำได้โดยวิธีใดบ้าง วันนี้เรามาดูกัน...

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

Python เป็นภาษาที่เราใช้งานกันเยอะมาก ๆ เพราะความยืดหยุ่นของมัน แต่ปัญหาของมันก็เกิดจากข้อดีของมันนี่แหละ ทำให้เมื่อเราต้องการ Performance แต่ถ้าเราจะบอกว่า เราสามารถทำได้ดีทั้งคู่เลยละ จะเป็นยังไง เราขอแนะนำ Numba ที่ใช้งาน JIT บอกเลยว่า เร็วขึ้นแบบ 700 เท่าตอนที่ทดลองกันเลย...

Humanise the Number in Python with "Humanize"

Humanise the Number in Python with "Humanize"

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

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

การทำงานกับตัวเลขทศนิยมบนคอมพิวเตอร์มันมีความลับซ่อนอยู่ เราอาจจะเคยเจอเคสที่ เอา 0.3 + 0.6 แล้วมันได้ 0.899 ซ้ำไปเรื่อย ๆ ไม่ได้ 0.9 เพราะคอมพิวเตอร์ไม่ได้มองระบบทศนิยมเหมือนกับคนนั่นเอง บางตัวมันไม่สามารถเก็บได้ เลยจำเป็นจะต้องประมาณเอา เราเลยเรียกว่า Floating Point Approximation...