Collection java

Collection

Collection គឺជា framework មួយរបស់ java ដែលបង្កើតឡើងមកឲ្យយើងធ្វើការ store និង manipulate(មានដូចជា​ search, sort, update, delete..) នៃបណ្តុំ object។ Collection គឺវាផ្ទុកតែ object ទេ ដែលប្រើជាមួយ wrapper class។

Collection គឺវាដំណើរការដូចជា​ searching, sorting, insertion, manipulation, delete..។

List

List គឺជាតាមលំដាប់។ វាអាចទុកចំនួនផ្ទួនបាន (duplicate element) ឧទាហរណ៍អាមុនមានលេខ ៥ ក្រោយមកដាក់លេខ ៥បានទៀត ដោយសារវាទុកតំលៃទៅតាម index (0, 1, 2...)។

នៅក្នុង list មានបីគឺ ArrayList, Vector និង LinkList

1. ArrayList

ArrayList class គឺប្រើជាលក្ខណជា dynamic array(វាអាចបត់បែនបានទៅតាមយើងឲ្យតំលៃទៅវា យើងអាចថែមថយវាបាន) ដើម្បីធ្វើការផ្ទុកនៅ elements របស់ខ្លួនវា។ យើងដឹងហើយថាលក្ខណរបស់ array គឺមិនអាចបត់បែនបានទេ គឺយើងដាក់ចំនួនប៉ុន្មានគឺវាប៉ុន្នឹង។

inherits ពី class មេរបស់វាឈ្មោះថា AbstractList និង interface មេរបស់វាឈ្មោះថា implements List។

ទំហំរបស់វាកើនលក្ខណជា dynamic។ វាកើនឡើងម្តង ៥០% ហើយទំហំ default របស់គឺ ១០។ ឧទាហរណ៍វាមានខ្លួនវា ១០ ហើយកើនឡើង ៥០% គឺវាឡើងទៅ ១៥ ហើយវាកើនឡើង ៥០% ទៀត​ ២៣..។

ArrayList វាអាចផ្ទុកតំលៃស្ទួនបាន។ វាមានលក្ខណលំដាប់លំដោយ។ វាជា non synchronize វាអាច access បានច្រើនក្នុងពេលតែមួយ។ random access យើងចង់ access ទៅយកធាតុវាមួយណាកក៏បាន តាមរយ index។ វាដំណើរការយឺតបន្ទិច។

ArrayList constructer មានបី៖

ArrayList()

វាជា array empty

ArrayList(collection c)

យើងបង្កើត array list ដោយវាមានធាតុស្រាប់ គឺដោយយើងឲ្យចំនួនធាតុជាមុន

ArrayList(int capacity)

capacity ទៅតាមយើង increase default

យើងបង្កើត ArrayList ដោយយើងសរសេរ ArrayList រួចចុច keyboard control+space វានឹងចេញមកហើយនៅក្នុងសញ្ញា <E> សំរាប់អក្សរ E គឺ Element សំរាប់យើងដាក់ wraper class

import java.util.ArrayList;

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
 }

}

យើងចង់ Add វា ដោយយើងប្រើ method add

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  
  System.out.println(arraylist);
 }

}

រាប់ចំនួនធាតុយើងប្រើ size

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  
     int mySize = arraylist.size();
     
  System.out.println("Number element array: "+mySize);
 }

}

Add ទៅតាមទីតាំងដែលយើងដាក់

arraylist.add(index, element);
index គឺសំរាប់ដាក់ទៅទីតាំងណាមួយដែលយើងចង់ដាក់ ដែលលំដាប់វាចាប់ពី ០ ទៅ
element គឺសំរាប់ដាក់តំលៃ។
នៅខាងលើ array ពីរគឺ 5 និង 8 ឥឡូវនេះយើង add array នៅចន្លោះ 5 និង 8
public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  
  arraylist.add(1, 10);
  
 
     
  System.out.println(arraylist);
 }

}

Get: គឺសំរាប់ចាប់យកវាមកបង្ហាញតាម index ដោយយើងប្រើ method get។

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  arraylist.add(1, 10);
  
  int myValue = arraylist.get(2);
  System.out.println("Array is "+myValue);
 }
}

Remove : យើងលុបតំលៃរបស់វាណាមួយទៅតាម index ដោយប្រើ remove method។

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  arraylist.add(1, 10);
  System.out.println(arraylist);
  arraylist.remove(1);
  System.out.println(arraylist);
 }
}
នៅក្នុងការលុប ឬ remove យើងអាចលុបម្តងទាំងអស់បាន ដោយយើងប្រើ removeAll method។
public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  arraylist.add(1, 10);
  
  arraylist.removeAll(arraylist);
  System.out.println(arraylist);
 }
}

Update: ដើម្បីយើងកែតំរូវតំលៃ ឬយើងហៅថា update គឺយើងប្រើ set method។

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  arraylist.add(1, 10);
  
  System.out.println(arraylist);
  arraylist.set(1, 15);
  System.out.println(arraylist);
 }
}
ដើម្បីយកធាតុរបស់ array នីមួយមកប្រើដោយមិនជាប់ object [] ដោយយើងប្រើជាមួយ for loop ប៉ុន្តែយើងត្រូវប្រើជាមួយ for(Integer)។
public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  arraylist.add(1, 10);
  
  System.out.println(arraylist);
  
  for(Integer e:arraylist) {
  System.out.println(e);
  }
 }
}

សំរាប់ e: គឺប្រកាស( delare )សំរាប់យើងយកវាមកប្រើ។

នៅក្នុង arrayList យើងអាចដាក់តំលៃទៅឲ្យវាផ្ទួនបាន (doublicate)។

public class ArrayListDemo {
 public static void main(String[] args) {
  ArrayList<Integer> arraylist = new ArrayList<>();
  arraylist.add(5);
  arraylist.add(8);
  arraylist.add(1, 10);
  
  System.out.println(arraylist);
  arraylist.add(10);
  System.out.println(arraylist);
 }
}

Vector

Vector គឺជា synchronized មានន័យថាមានដំណើរការម្តងមួយៗ។ វាបង្កើនទំហំរបស់វាម្តង ១០០% ហើយ default គឺ ២០ វាជាប្រភេទ legacy class (កូដចាស់)

លក្ខណរបស់ vector
1
Vector()
វាជា default vector
2
Vector(int size)
ការកំណត់ទំហំរបស់វា ហើយទំហំរបស់វា default 20
3
Vector(int size, int incr)
ការកំណត់ vector ទៅតាម element
4
Vector(Collection c)
ការបង្កើត vector ទៅតាម object
public class VectorDe {
 public static void main(String[] args) {
 
  Vector<String> fruit = new Vector<>();
 
 fruit.add("Apple");
 fruit.add("Banana");
 fruit.add("Coconat");
 fruit.add("Manko");
 
 System.out.println(fruit);
}
}
container គឺសំរាប់ search object
public class VectorDe {
 public static void main(String[] args) {
 
  Vector<String> fruit = new Vector<>();
 
 fruit.add("Apple");
 fruit.add("Banana");
 fruit.add("Coconat");
 fruit.add("Manko");
 
 System.out.println(fruit);
 
 boolean b = fruit.contains("Coconat");
 
 System.out.println(b);
}
}

របៀបយកធាតុរបស់ vector មកប្រើដោយប្រើ Enumeration method

public class VectorDemo {
 public static void main(String[] args) {
  Vector<String> fruit = new Vector<>();
  
  fruit.add("Apple");
  fruit.add("Banana");
  fruit.add("Coconat");
  fruit.add("Manko");
  
  System.out.println(fruit);
  
  Enumeration<String> elements = fruit.elements();
  while(elements.hasMoreElements()) {
   String e = (String) elements.nextElement();
   System.out.println(e);
  } 
  }

}

LinkedList

LinkedList គឺជា structure មួយសំរាប់ store elements ហើយវា link ជាប់គ្នា

public class LinkListDemo {
 public static void main(String[] args) {
 LinkedList<Integer> num = new LinkedList<>();
 num.add(10);
 num.add(23);
 num.add(35);
 num.add(60);
 
 System.out.println(num);
  }
}
add
public class LinkListDemo {
 public static void main(String[] args) {
 LinkedList<Integer> num = new LinkedList<>();
 num.add(10);
 num.add(23);
 num.add(35);
 num.add(60);
 
 System.out.println(num);
 
 num.add(1, 15);
 System.out.println(num); 
}
}
remove
public class LinkListDemo {
 public static void main(String[] args) {
 LinkedList<Integer> num = new LinkedList<>();
 num.add(10);
 num.add(23);
 num.add(35);
 num.add(60);
 
 System.out.println(num);
 
 num.add(1, 15);
 System.out.println(num);
 
 num.remove(1);
 System.out.println(num); 
}
}
យើងអាច add fist និង add last នៃធាតុរបស់វាបាន។

ការយកធាតុរបស់វាមកប្រើ

public class LinkListDemo {
 public static void main(String[] args) {
 LinkedList<Integer> num = new LinkedList<>();
 num.add(10);
 num.add(23);
 num.add(35);
 num.add(60);
 
 System.out.println(num);

 Iterator<Integer> itr = num.iterator();
 while(itr.hasNext()) {
  System.out.println(itr.next());
 } 
}
}

Set

Set វាសំរាប់ផ្ទុក element ប៉ុន្តែមិនអាច ផ្ទុកផ្ទួនបានទេ ហើយវាមិនផ្ទុកមិនទៅតាមលំដាប់។ នៅក្នុងមេរៀន set នេះមានពីរគឺ HashSet និង TreeSet
HashSet
HashSet គឺជា Set ហើយវាមានពីរលក្ខណសំខានៗរបស់គឺ៖

– HashSet វាសំរាប់ store element ដែលប្រើ algorithm មួយដែលហៅថា hashing

hashing គឺជាការបង្កើត hash កូដមួយ ដែល hash កូដនឹងប្រើសំរាប់តំណាងឲ្យ element មួយៗ ដើម្បីប្រាកដថា element ត្រូវតែជា unit (ដែលកំណត់ថាវាមិនអាចផ្ទួនបាន)
public class HashSetDemo {
 public static void main(String[] args) {
  HashSet<String> animal = new HashSet<String>();
  animal.add("Cow");
  animal.add("Dog");
  animal.add("Mankey");
  animal.add("Cat");
  System.out.println(animal);
 }
}
HashSet Remove
public class HashSetDemo {
 public static void main(String[] args) {
  HashSet<String> animal = new HashSet<String>();
  animal.add("Cow");
  animal.add("Dog");
  animal.add("Mankey");
  animal.add("Cat");
  System.out.println(animal);
  
  animal.remove("Mankey");
  
  System.out.println(animal);
 }
}
Note: Set យើងមិនអាចចាប់យកទីតាំងជាក់លាក់របស់វាមកប្រើបានទេ ប្រសិនជាយើងចង់ប្រើវាទល់តែយើងប្រើ loop
public class HashSetDemo {
 public static void main(String[] args) {
  HashSet<String> animal = new HashSet<String>();
  animal.add("Cow");
  animal.add("Dog");
  animal.add("Mankey");
  animal.add("Cat");
  System.out.println(animal);
  
  animal.remove("Mankey");
  
  System.out.println(animal);
  
  Iterator<String> elements = animal.iterator();
  while (elements.hasNext()) {
   System.out.println(elements.next()); 
  }
 }
}
TreeSet

TreeSet វាដូចទៅនឹង hashSet ដែរ ប៉ុន្តែ TreeSet វាមានជា auto sort ដោយវាមាន ascending order និង descending order។

public class TreeSetDemo {
 public static void main(String[] args) {
  TreeSet<String> animal = new TreeSet<String>();
  animal.add("Cow");
  animal.add("Dog");
  animal.add("Mankey");
  animal.add("Cat");
  animal.add("Frog");
  
  System.out.println(animal);
 }
}
Descending order
public class TreeSetDemo {
 public static void main(String[] args) {
  TreeSet<String> animal = new TreeSet<String>();
  animal.add("Cow");
  animal.add("Dog");
  animal.add("Mankey");
  animal.add("Cat");
  animal.add("Frog");
  
  System.out.println(animal);
  
  System.out.println(animal.descendingSet());
 }
}

Map

Map វាក៏ជាប្រភេទ collection ផងដែរ វាជាប្រភេទផ្ទុក value ហើយសំរាប់ value នីមួយៗមាន Key និង value ហើយ key និង value pair គេអាចហៅម្យ៉ាងទៀតបានថា entry។ Map គឺ key វាមិនអាចផ្ទួនគ្នាបានទេ ប៉ុន្តែ សំរាប់ value វាអាចផ្ទួនគ្នាបាន។ នៅពេលយើងចង់ add, delete, update.. ទៅតាម Key

HashMap

- តំលៃរបស់វាផ្ទកទៅតាម key
- វាផ្ទកតំលៃជា unique
- Key វាអាចមាន null តែមួយ ប៉ុន្តែ value វាអាចមាន null បានច្រើន
- ការផ្ទកដូចទៅនឹង HashSet ដែរ គឺវាមិន order។

public class HashMapDemo {
 public static void main(String[] args) {
 HashMap<String, String> countries = new HashMap<>();
 countries.put("EN", "England");
 countries.put("UK", "United Kingdom");
 countries.put("CA", "Cambodia");
 countries.put("US", "United State");
 System.out.println(countries);
}
}
នៅពេលយើងហៅវាមកប្រើ HashMap<K, V>
- K = Key
- V = Value

Update ក្នុងការ update ដោយប្រើ replace

countries.replace("US", "United States");
ហើយសំរាប់ remove យើងត្រូវតែ remove តាម key
countries.remove("US");  

របៀប loop វាចេញ

public class HashMapDemo {
public class HashMapDemo {
 public static void main(String[] args) {
	HashMap<String, String> countries = new HashMap<>();
	countries.put("EN", "England");
	countries.put("UK", "United Kingdom");
	countries.put("CA", "Cambodia");
	countries.put("US", "United State");
	System.out.println(countries);
	
	for(Map.Entry<String, String> mapEntry:countries.entrySet()) {
		System.out.println(mapEntry.getKey()+":"+mapEntry.getValue());
	}
}
}
TreeMap

វាដូចទៅនឹង HashMap ប៉ុន្តែវាខុសត្រូវថាវាគ្មាន null key និងវា sorted ឲ្យយើងដោយស្វ័យប្រវត្តិ ហើយវា sorted តាម key។

public class TreeMamDemo {
public static void main(String[] args) {
	TreeMap<Integer, String> treeMap = new TreeMap<>();
	treeMap.put(4, "Dog");
	treeMap.put(1, "Cow");
	treeMap.put(6, "Cat");
	treeMap.put(2, "Mankey");
	
	System.out.println(treeMap);
}
}
Hashtable

Hashtable ដូចទៅនឹង hashMap និង treeMap ដែរ ប៉ុន្តែខុសវាត្រង់ថាវាគ្មាន null key និង null value ហើយវាជាប្រភេទ syschronized។

public class HashTableDemo {
public static void main(String[] args) {
	Hashtable<Integer, String> person = new Hashtable<>();
	person.put(1, "Dul");
	person.put(2, "Keo");
	person.put(3, "Dara");
	System.out.println(person);
}
}

Post a Comment

0 Comments