By Arnon Puitrakul - 24 ธันวาคม 2014
เมื่อวานเราได้เรียนรู้เกี่ยวกับการ รับข้อมูล และ การเอาข้อมูลออก วันนี้เราจะมาเรียนรู้เกี่ยวกับการเก็บข้อมูลแบบหนึ่งที่ใครๆน่าจะรู้จัก นั่นคือ 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 อยู่ (เอาที่ใช้บ่อยๆนะ) ดังนี้
เราเป็นคนที่อ่านกับซื้อหนังสือเยอะมาก ปัญหานึงที่ประสบมาหลายรอบและน่าหงุดหงิดมาก ๆ คือ ซื้อหนังสือซ้ำเจ้าค่ะ ทำให้เราจะต้องมีระบบง่าย ๆ สักตัวในการจัดการ วันนี้เลยจะมาเล่าวิธีการที่เราใช้ Obsidian ในการจัดการหนังสือที่เรามีกัน...
หากเราเรียนลงลึกไปในภาษาใหม่ ๆ อย่าง Python และ Java โดยเฉพาะในเรื่องของการจัดการ Memory ว่าเขาใช้ Garbage Collection นะ ว่าแต่มันทำงานยังไง วันนี้เราจะมาเล่าให้อ่านกันว่า จริง ๆ แล้วมันทำงานอย่างไร และมันมีเคสใดที่อาจจะหลุดจนเราต้องเข้ามาจัดการเองบ้าง...
ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...
เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...