Home / ພື້ນຖານ Java / Collections
Collection ຄືອອບເຈັກທີ່ສາມາດເກັບຂໍ້ມູນຂອງອອບເຈັກອື່ນໃນຕົວມັນໄດ້ແບບໄດນາມິກສ໌ ແລະ ເປັນເຄື່ອງມືອຳນວຍຄວາມສະດວກທີ່ຈະຊ່ວຍໃຫ້ໂປຣແກຣມເມອຣ໌ຂຽນໂປຣແກຣມໄດ້ວ່ອງໄວ ແລະ ມີປະສິດທິພາບກວ່າ ໃນພາສາ Java ນັ້ນມີ Collection ຫລວງຫລາຍທີ່ເຈົ້າສາມາດໃຊ້ໃນການຂຽນໂປຣແກຣມຊຶ່ງ Collection ຖືກ Implement ມາຈາກ Interfaces Collection ຊຶ່ງເປັນໄລບຣາຣີ່ຂອງພາສາທີ່ຢູ່ໃນ Package java.util ແລະ ໃນ Collection ສ່ວນຫລາຍນັ້ນສືບທອດມາຈາກ Abstract class ແລະມີການ Implement ບາງ Interfaces ທັງຫມົດກັນ
Collection ນັ້ນເປັນການເກັບຂໍ້ມູນແບບໄດນາມິກສ໌ ນັ້ນໝາຍຄວາມວ່າເຈົ້າສາມາດເພີ່ມຂໍ້ມູນເຂົ້າໄປໃນ Collection ໄດ້ບໍ່ຈຳກັດ ໂດຍທີ່ບໍ່ຕ້ອງກຳນົດຂະໜາດສູງສຸດໃນການເກັບຂໍ້ມູນລ່ວງໜ້າ Collection ມີເມທອດທີ່ເຮັດວຽກດ້ວຍອັນກໍຣຶມທຶມທີ່ມີປະສິດທິພາບເປັນຈຳນວນຫລາຍໃຫ້ເຈົ້າສາມາດໃຊ້ງານໄດ້ທັນທີ ໂດຍທີ່ບໍ່ຕ້ອງຂຽນຂຶ້ນອີກ ຢົກຕົວຢ່າງເຊັ່ນ ການຣຽງຂໍ້ມູນພາຍໃນ Collection ເປັນຕົ້ນ Collection ນັ້ນເປັນ Generic type ຊຶ່ງມີຮູບແບບເປັນ G<T> ໃນບົດນີ້ ເຮົາຈະແນະນຳໃຫ້ເຈົ້າຮູ້ຈັກກັບ Collection ໃນພາສາ Java ເບື້ອງຕົ້ນ ດັ່ງນີ້
ການໃຊ້ Array list ໃນພາສາ Java
ການໃຊ້ Map ໃນພາສາ Java
ການໃຊ້ Stack ໃນພາສາ Java
Array list ຄື Collection ທີ່ໃຊ້ເກັບຂໍ້ມູນເໝືອນອາເຣຢົ໌ບກຕິ ແຕ່ສິ່ງທີ່ແຕກຕ່າງກັນຄື Array list ສາມາດຫຍໍ້ແລະຂະຫຍາຍຂອງມັນໄດ້ອັດໂນມັຕິຕາມຂໍ້ມູນທີ່ມີຢູ່ພາຍໃນ ນັ້ນເອງເຮັດໃຫ້ມັນຢືດຫຢຸ່ນໃນການເຮັດວຽກງານເພາະບໍ່ຕ້ອງກຳນົດຂະໜາດສູງສຸດລ່ວງໜ້າເໝືອນກັບອາເຣຢົ໌ບກຕິ ມັນຖືກສືບທອດມາຈາກ Abstract list ຄລາດ ແລະມີການ Implement Collection Interfaces ສຳລັບເມທອດການເຮັດວຽກງານຂອງມັນ ຕໍ່ໄປເປັນຕົວຢ່າງການໃຊ້ງານ Array list ໃນພາສາ Java
import java.util.ArrayList;
public class ArrayListExample {
public static void main (String[] args) {
ArrayList<String> names = new ArrayList<String>();
names.add("Mateo");
names.add("Danny");
names.add("Joe");
names.add("Alex");
System.out.println(names.size() + " people in the list");
// Access list through it index
System.out.println("name[0] = " + names.get(0));
System.out.println("name[3] = " + names.get(3));
// Iterate through ArrayList usign foreach
for (String name: names) {
System.out.print(name + " ");
}
System.out.println();
// Iterate through ArrayList using index (reverse)
for (int i = names.size() - 1; i >= 0; i--) {
System.out.print(names.get(i) + " ");
}
System.out.println();
// Check if the list contain Mateo
if (names.contains("Mateo")) {
System.out.println("Mateo is in the list");
} else {
System.out.println("Mateo is not in the list");
}
// Get Danny's index
int dannyIndex = names.indexOf("Danny");
System.out.println("Index of Danny is " + dannyIndex);
// Change Danny to Max
names.set(dannyIndex, "Max");
// Remove joe from the list
names.remove("Joe");
// Iterate through ArrayList usign foreach
for (String name: names) {
System.out.print(name + " ");
}
System.out.println();
// Clear all list data
names.clear();
if(names.isEmpty()) {
System.out.println("List is now empty");
}
}
}
ໃນຕົວຢ່າງ ເປັນໂປຣແກຣມໃນການໃຊ້ Array list ສຳລັບເກັບຊື່ຂອງຜູ້ໃຊ້ ຫຼັງຈາກນັ້ນເຮົາຈະໃຊ້ Iterator ໃນກາຣວນອ່ານຂໍ້ມູນຈາກອາເຣຢ໌ ແລະການໃຊ້ງານເມທອດຕ່າງໆ ຂອງ Array list ໃນການທີ່ຈະໃຊ້ Array list ໃນພາສາ Java ນັ້ນເຮົາຕ້ອງກໍ່ການ import java.util.ArrayList ໄລບຣາຣີ່
ArrayList<String> names = new ArrayList<String>();
ນິ້ເປັນຄຳສັ່ງໃນການປະກາດອາເຣຢ໌ລິສຕ໌ຈາກຄລາດ ArrayList ແລະໃນພາຍໃນເຄື່ອງໝາຍ <String> ນັ້ນໝາຍເຖິງ Array list ນີ້ຈະໃຊ້ສຳລັບເກັບຂອງອອບເຈັກ String ນັ້ນໝາຍຄວາມວ່າມັນສາມາດເກັບອອບເຈັກອື່ນກໍໄດ້ ໂດຍການກຳນົດຄລາດຂອງອອບເຈັກໃນເຄື່ອງໝາຍ <>
names.add("Mateo");
names.add("Danny");
names.add("Joe");
names.add("Alex");
ຫຼັງຈາກນັ້ນເຮົາເພີ່ມ 4 ຊື່ລົງໄປໃນ Array list ດ້ວຍເມທອດ add() ຂໍ້ມູນທີ່ເພີ່ມລົງໄປນັ້ນຕ້ອງເປັນ String ເພາະວ່າເຮົາໄດ້ກຳນົດ Array list ສຳລັບເກັບຂໍ້ມູນ String ໃນຕອນປະກາດ
System.out.println(names.size() + " people in the list");
// Access list through it index
System.out.println("name[0] = " + names.get(0));
System.out.println("name[3] = " + names.get(3));
Collection ສ່ວນຫລາຍມີເມທອດ size() ສຳລັບນັບຈຳນວນສະມາຊິກຂອງມັນ ເຮົາໄດ້ໃຊ້ເມທອດດັ່ງກລ່າວໃນການນັບຂໍ້ມູນຂອງ Array list ແລະເຮົາເຂົ້າເຖິງຂໍ້ມູນຂອງ Array list ດ້ວຍເມທອດ get() ໂດຍໃສ່ Index ເປັນພາຣາມິເຕອຣ໌ ຊຶ່ງ Index ຂອງ Array list ນັ້ນຈະເໝືອນກັບອາເຣຢົ໌ບກຕິຄືຂໍ້ມູນທີ່ເພີ່ມເຂົ້າອັນແຮກຈະມີ Index ເຣີ່ມຈາກ 0 ແລະເພີ່ມໄປເທື່ອລະ 1
// Get Danny's index
int dannyIndex = names.indexOf("Danny");
System.out.println("Index of Danny is " + dannyIndex);
// Change Danny to Max
names.set(dannyIndex, "Max");
ເມທອດ indexOf() ໃຊ້ຮັບຄ່າຂອງ Index ຂອງຂໍ້ມູນທີ່ຕ້ອງການໃນອາເຣຢ໌ ໃນຕົວຢ່າງເຮົາຫາ Index ຂອງ "Danny" ຫຼັງຈາກນັ້ນເຮົາປ່ຽນຄ່າທີ່ Index ດັ່ງກລ່າວດ້ວຍເມທອດ set() ໃນຄຳສັ່ງເຫຼົ່ານີ້ຈຶ່ງເປັນການປ່ຽນຂໍ້ມູນໃນອາເຣຢ໌ຈາກ "Danny" ເປັນ "Max"
// Remove joe from the list
names.remove("Joe");
ເມທອດ remove() ເປັນການນຳຂໍ້ມູນອອກຈາກອາເຣຢ໌ ໃນຕົວຢ່າງເປັນການລົບ "Joe" ອອກຈາກອາເຣຢ໌ ຜົນລັບທົ໌ກອົງການລົບກໍຄື Index ພາຍໃນອາເຣຢ໌ຫຼັງຈາກຕຳແໜ່ງທີ່ຖືກລົບຈະເລື່ອນລົງມາໜຶ່ງ ເຈົ້າສາມາດລົບໃສ່ພາຣາມິເຕອຣ໌ເປັນ Index ໄດ້ ເຊັ່ນ names.remove(2) ນັ້ນໃຫ້ຜົນລັບທ໌ເຊັ່ນດຽວກັນກັບຄຳສັ່ງດ້ານເທິງ
ເມທອດ clear() ໃຊ້ສຳລັບລົບຂໍ້ມູນທັງໝົດອອກຈາກອາເຣຢ໌ ແລະເມທອດ isEmpty() ເພື່ອກວດສອບວ່າ Collection ນັ້ນວ່າງຫຼືມີຂໍ້ມູນຫຼືບໍ່
4 people in the list
name[0] = Mateo
name[3] = Alex
Mateo Danny Joe Alex
Alex Joe Danny Mateo
Mateo is in the list
Index of Danny is 1
Mateo Max Alex
List is now empty
Maps ເປັນ Collection ທີ່ມີຮູບແບບໃນການເກັບຂໍ້ມູນເປັນແບບ Key Value ແລະເປັນຄລາດທີ່ Implement ມາຈາກ java.util.Map Interface ໃນພາສາ Java ນັ້ນມີ Map ຫຼາຍປະເພດ ແຕ່ທີ່ໃຊ້ເລື້ອຍ ໆ ຄື HashMap ແລະ TreeMap ໂດຍທີ່ HashMap ຈະເກັບຂໍ້ມູນໂດຍບໍ່ມີການຣຽງຂອງ Key ແລະ Value ສ່ວນ TreeMap ຈະມີການຣຽງຂໍ້ມູນພາຍໃນ ເຮັດໃຫ້ການເຂົ້າເຖິງຂໍ້ມູນພາຍໃນ Map ຈະໄວກວ່າ ໃນທາງກລັບກັນ HashMap ນັ້ນການເພີ່ມຂໍ້ມູນຈະໄວກວ່າ ຕໍ່ໄປເປັນຕົວຢ່າງໃນການໃຊ້ Map ໃນພາສາ Java
import java.util.HashMap;
public class HashMapExample {
public static void main (String[] args) {
HashMap<String, String> country = new HashMap<>();
country.put("de", "German");
country.put("th", "Thailand");
country.put("us", "United State");
country.put("tr", "Turkey");
System.out.println("Map size = " + country.size());
System.out.println("de = " + country.get("de"));
System.out.println("th = " + country.get("th"));
System.out.println("th = " + country.get("uk"));
System.out.println("Iterate over each Entry in HashMap");
for (HashMap.Entry<String, String> entry : country.entrySet())
{
System.out.println(entry.getKey() + " = " + entry.getValue());
}
country.remove("tr");
if (country.containsKey("tr")) {
System.out.println("Turkey exist in the map");
} else {
System.out.println("Turkey does not exist in the map");
}
country.clear();
System.out.println("Map size = " + country.size());
}
}
ໃນຕົວຢ່າງ ເປັນການໃຊ້ງານ Map ໃນການເກັບຂໍ້ມູນຂອງປະເທດ ໂດຍມີຊື່ຫຍໍ້ຂອງໂດເມນເປັນ Key ແລະຊື່ປະເທດເປັນ Value ຫຼັງຈາກນັ້ນສ້າງອອບເຈັກດ້ວຍຄລາດ HashMap ແລະໃຊ້ Iterator ສຳລັບວົນອ່ານຄ່າ Key Value ພາຍໃນ Map ແລະສະແດງຂໍ້ມູນພາຍໃນ Map ແລະໃຊ້ເມທອດທີ່ສຳຄັນຂອງມັນ
HashMap<String, String> country = new HashMap<>();
ນິ້ເປັນຄຳສັ່ງໃນການປະກາດ Map ໂດຍໃຊ້ຄລາດ HashMap ສຳລັບເກັບຂໍ້ມູນຂອງປະເທດ ທັງ Key ແລະ Value ຂອງ Map ນີ້ເປັນປະເພດຂໍ້ມູນແບບ String
country.put("de", "German");
country.put("th", "Thailand");
country.put("us", "United State");
country.put("tr", "Turkey");
ເຮົາເພີ່ມຂໍ້ມູນລົງໄປໃນ Map ດ້ວຍເມທອດ put() ຊຶ່ງພາຣາມິເຕີຣົ໌ກອົງເມທອດນັ້ນເປັນ Key ແລະ Value ຕາມລຳດັບ ເຮົາໄດ້ເພີ່ມ 4 ປະເທດລົງໄປໃນ HashMap ຂອງເຮົາ
System.out.println("de = " + country.get("de"));
System.out.println("th = " + country.get("th"));
System.out.println("th = " + country.get("uk"));
ເມທອດ get() ເປັນເມທອດສຳລັບຮັບຄ່າຂອງອອບເຈັກພາຍໃນ Map ໂດຍມີ Key ຂອງອອບເຈັກເປັນພາຣາມິເຕອຣ໌ ໃນຕົວຢ່າງ ເຮົາໄດ້ເຂົ້າເຂົ້າເຖິງຄ່າ "German" "Thailand" ແລະ "Turkey" ຕາມລຳດັບ
System.out.println("Iterate over each Entry in HashMap");
for (HashMap.Entry<String, String> entry : country.entrySet())
{
System.out.println(entry.getKey() + " = " + entry.getValue());
}
ນິ້ເປັນກາຣວນອ່ານຄ່າ Key Value ພາຍໃນ Map ໂດຍການໃຊ້ HashMap.Entry Iterator ທີ່ໃຊ້ສຳລັບເຮັດວຽກກັບ Map ປະເພດຕ່າງ ແລະສະແດງຜົນ Key ແລະ Value ອອກທາງໜ້າຈໍ
country.remove("tr");
if (country.containsKey("tr")) {
System.out.println("Turkey exist in the map");
} else {
System.out.println("Turkey does not exist in the map");
}
ເມທອດ remove() ເປັນເມທອດໃນການນຳອອບເຈັກຂອງ Key ທີ່ຣະບຸອອກຈາກ Map ແລະເມທອດ containsKey() ໃຊ້ເພື່ອກວດສອບວ່າມີ Key ດັ່ງກລ່າວຢູ່ໃນ Map ຫຼືບໍ່ ຫຼືເຈົ້າສາມາດກວດສອບໂດຍ Value ໄດ້ໂດຍການໃຊ້ເມທອດ containsValue()
Iterate over each Entry in HashMap
de = German
th = Thailand
us = United State
tr = Turkey
Turkey does not exist in the map
Map size = 0
ນິ້ເປັນຜົນລັບການເຮັດວຽກງານຂອງໂປຣແກຣມສຳລັບການໃຊ້ງານ Map ໃນພາສາ Java ເຈົ້າຈະເຫັນວ່າເຮົາບໍ່ໄດ້ອະທິບາຍສຳລັບບາງເມທອດ ເພາະວ່າມັນມີການເຮັດວຽກງານທີ່ຄືກັນກັບ Array list ເຊັ່ນ ເມທອດ size() ສຳລັບຫາຂະໜາດ ຫຼືເມທອດ clear() ສຳລັບລົບຂໍ້ມູນທັງໝົດອອກຈາກ Map
Stack ຄືໂຄງສ້າງຂໍ້ມູນທີ່ໃຊ້ໃນການເກັບຂໍ້ມູນໃນຮູບແບບ First in last out (FILO) ຂໍ້ມູນທີ່ຖືກໃສ່ເຂົ້າໄປໃສ Stack ເປັນອັນແຮກນັ້ນຈະນຳອອກໄດ້ພາຍຫຼັງ ນັ້ນຄືເຮົາສາມາດນຳເຂົ້າມູນເຂົ້າອອກໄດ້ທາງດຽວ ໃນການເຮັດວຽກງານກັບ Stack ເມື່ອເຮົາຂໍ້ມູນໃສ່ລົງໄປໃນ Stack ຈະຮຽກວ່າ Push ແລະເມື່ອນຳຂໍ້ມູນອອກມາຈາກ Stack ຮຽກວ່າ Pop ເຮົາສາມາດຈັດການກັບຂໍ້ມູນທີ່ຢູ່ດ້ານເທິງສຸດຂອງ Stack ໄດ້ເທົ່ານັ້ນ
Stack ຖືກນຳໄປໃຊ້ຫລວງຫລາຍໃນການຂຽນໂປຣແກຣມໃນລະບົບປະຕິບັດການ ຕົວຢ່າງຂອງການໃຊ້ງານຂອງ Stack ເຊັ່ນ ການຮຽກໃຊ້ງານຟັງກ໌ຊັນ ທີ່ຈະມີການເກັບຟັງກ໌ຊັນທີ່ຖືກຮຽກລົງໃນ Stack ແລະເພື່ອເຮັດວຽກໃນຟັງກ໌ຊັນນັ້ນສຳເລັດແລ້ວ ຈະນຳອອກຈາກ Stack ເປັນຕົ້ນ ໃນບົດນີ້ ຈະເປັນຕົວຢ່າງການໃຊ້ງານ Stack ເພື່ອເກັບຂໍ້ມູນໃນເບື້ອງຕົ້ນ ໃນພາສາ Java
import java.util.Stack;
public class StackExample {
public static void main (String[] args) {
Stack<String> fruit = new Stack<>();
// Add four fruits to stack
fruit.push("Apple");
fruit.push("Banana");
fruit.push("Melon");
fruit.push("Peach");
System.out.println("Pop " + fruit.pop() + " from stack");
System.out.println("Pop " + fruit.pop() + " from stack");
System.out.println("Pop " + fruit.pop() + " from stack");
System.out.println("Pop " + fruit.pop() + " from stack");
if (fruit.isEmpty()) {
System.out.println("Stack is empty");
}
}
}
ໃນຕົວຢ່າງ ເປັນການໃຊ້ງານ Stack ໃນການເກັບຊື່ຂອງຫມາກໄມ້ ເຮົາປະກາດຕົວແປຣ fruit ຈາກຄລາດ Stack ແລະກຳນົດນ Generic type ເປັນ String ເມທອດ push() ໃຊ້ສຳລັບເພີ່ມຂໍ້ມູນລົງໄປໃນ Stack ເຮົາໄດ້ເພີ່ມຊື່ຫມາກໄມ້ 4 ຊະນິດລົງໄປຂໍ້ມູນລ່າສຸດໃນ Stack ຈຶ່ງເປັນ "Peach" ເມທອດ pop() ນັ້ນເປັນການນຳຂໍ້ມູນລ່າສຸດໃນ Stack ອອກມາ
Pop Peach from stack
Pop Melon from stack
Pop Banana from stack
Pop Apple from stack
Stack is empty
ນິ້ເປັນຜົນລັບການເຮັດວຽກຂອງໂປຣແກຣມຂອງການໃຊ້ງານ Stack ໃນພາສາ Java
ໃນບົດນີ້ ເຈົ້າໄດ້ຮູ້ຈັກກັບ Collection ແລະຕົວຢ່າງການໃຊ້ງານ Collection ປະເພດຕ່າງໆ ໃນພາສາ Java ຊຶ່ງ Collection ແຕ່ລະປະເພດນັ້ນເປັນໂຄງສ້າງຂໍ້ມູນທີ່ອອກແບບມາສຳລັບການຈັດເກັບຂໍ້ມູນໃນສະຖານນະການຕ່າງໆ ຂອງການຂຽນໂປຣແກຣມ Collection ນັ້ນມີບາງເມທອດທີ່ຄືກັນ ເຊັ່ນ ເມທອດ size() ສຳລັບນັບຈຳນວນທັງໝົດ ເປັນຕົ້ນ ເພາະວ່າພວກມັນສືບທອດມາຈາກຄລາດຫຼັກດຽວກັນ