© Khmer Angkor Academy - sophearithput168

Collections

Java Collection Framework (ការប្រមូលទិន្នន័យ)

📚 Collection Framework គឺជាអ្វី?

Java Collection Framework គឺស្ថាបត្យកម្មដែលបង្កើតរួចហើយដើម្បីរក្សាទុក និង គ្រប់គ្រងក្រុមនៃ objects។ វាផ្តល់interfaces និង classesជាច្រើនសម្រាប់ការងារផ្សេងៗ។

ឧទាហរណ៍ក្នុងជីវិតពិត:

  • បញ្ជីទិញទំនិញ: ArrayList (រៀបតាមលំដាប់)
  • វចនានុក្រម: HashMap (key-value pairs)
  • សិស្សក្នុងថ្នាក់: Set (មិនមានស្ទួន)
  • ជួរសម្រាប់ចូល: Queue (FIFO - First In First Out)

💡 ហេតុអ្វីប្រើ Collections?

  1. Dynamic Size: ទំហំបន្ថែម/ថយដោយស្វ័យប្រវត្តិ (ផ្ទុយពី arrays)
  2. Ready-made Methods: add, remove, search, sort មានរួចហើយ
  3. Different Data Structures: List, Set, Map, Queue...
  4. Performance: Optimized algorithms
  5. Interoperability: Collections ធ្វើការជាមួយគ្នាបាន
  6. Type Safety: Generics ធានា type safety

🎯 Collection Hierarchy

Collection Interface
├── List (Ordered, allows duplicates)
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector
│
├── Set (Unique elements only)
│   ├── HashSet
│   ├── LinkedHashSet
│   └── TreeSet
│
└── Queue (FIFO)
    ├── PriorityQueue
    └── LinkedList

Map Interface (Separate - Key-Value pairs)
├── HashMap
├── LinkedHashMap
├── TreeMap
└── Hashtable

📊 Collections vs Arrays

លក្ខណៈ Arrays Collections
ទំហំ Fixed size Dynamic size
Methods Limited (length only) ច្រើន (add, remove, search...)
Data Types Primitive + Objects Objects only (use wrapper classes)
Performance Faster for fixed data Better for dynamic data
Type Safety Limited Generics support

📋 ArrayList

📖 ArrayList គឺជាអ្វី?

ArrayList គឺdynamic arrayដែល:

  • ទំហំអាចប្តូរបាន
  • រក្សាលំដាប់ insertion
  • អនុញ្ញាតduplicate elements
  • អាចaccess by index

✅ Basic Usage

import java.util.ArrayList;

// Create ArrayList
ArrayList<String> fruits = new ArrayList<>();

// Add elements
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");

// Access element
String first = fruits.get(0);  // "Apple"

// Size
int size = fruits.size();  // 3

// Remove element
fruits.remove(1);  // Remove "Banana"
fruits.remove("Orange");  // Remove by value

// Check if contains
boolean hasApple = fruits.contains("Apple");  // true

// Clear all
fruits.clear();

📊 ArrayList Methods

Method Description Example
add(element) បន្ថែមធាតុ list.add("Java")
get(index) យកធាតុតាម index list.get(0)
set(index, element) ផ្លាស់ប្តូរធាតុ list.set(0, "Python")
remove(index/object) លុបធាតុ list.remove(0)
size() ចំនួនធាតុ list.size()
contains(object) ពិនិត្យមាន ឬ អត់ list.contains("Java")
clear() លុបទាំងអស់ list.clear()
isEmpty() ពិនិត្យទទេ list.isEmpty()
Java Code
Click "Run" to execute the Java code

🗺️ HashMap

📖 HashMap គឺជាអ្វី?

HashMap រក្សាទុកទិន្នន័យជាkey-value pairs:

  • Keys ត្រូវតែunique
  • Values អាចduplicate
  • មិនរក្សាលំដាប់
  • Fast access by key
  • អនុញ្ញាតnull (1 null key, multiple null values)

✅ Basic Usage

import java.util.HashMap;

// Create HashMap
HashMap<String, Integer> scores = new HashMap<>();

// Add key-value pairs
scores.put("Dara", 95);
scores.put("Sok", 87);
scores.put("Chan", 92);

// Get value by key
int daraScore = scores.get("Dara");  // 95

// Check if key exists
boolean hasSok = scores.containsKey("Sok");  // true

// Check if value exists
boolean has95 = scores.containsValue(95);  // true

// Remove by key
scores.remove("Sok");

// Size
int size = scores.size();  // 2

// Update value
scores.put("Dara", 98);  // Update existing key

📊 HashMap Methods

Method Description Example
put(key, value) បន្ថែម/ធ្វើបច្ចុប្បន្នភាព map.put("A", 1)
get(key) យក value តាម key map.get("A")
remove(key) លុបតាម key map.remove("A")
containsKey(key) ពិនិត្យមាន key map.containsKey("A")
containsValue(value) ពិនិត្យមាន value map.containsValue(1)
keySet() បញ្ជី keys ទាំងអស់ map.keySet()
values() បញ្ជី values ទាំងអស់ map.values()
size() ចំនួន pairs map.size()

🔄 Iterating HashMap

HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);

// Method 1: Using keySet()
for (String key : map.keySet()) {
    System.out.println(key + " = " + map.get(key));
}

// Method 2: Using entrySet()
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}
Java Code
Click "Run" to execute the Java code

🎨 List vs Set vs Map

លក្ខណៈ List (ArrayList) Set (HashSet) Map (HashMap)
Duplicates ✅ អនុញ្ញាត ❌ មិនអនុញ្ញាត Keys: ❌, Values: ✅
Order ✅ រក្សាលំដាប់ ❌ គ្មានលំដាប់ ❌ គ្មានលំដាប់
Access By index Iteration only By key
Null ✅ Multiple nulls ✅ One null ✅ One null key
ប្រើនៅពេល រក្សាលំដាប់, duplicates OK Unique elements Key-value mapping

💡 When to Use What?

✅ Use ArrayList when:

  • ត្រូវការaccess by index
  • ត្រូវការរក្សាលំដាប់
  • Duplicates are allowed
  • Shopping cart, To-do list, Student list

✅ Use HashSet when:

  • ត្រូវការunique elements only
  • មិនខ្វល់លំដាប់
  • Fast lookup
  • Email addresses, Unique IDs, Tags

✅ Use HashMap when:

  • ត្រូវការkey-value mapping
  • Fast lookup by key
  • Dictionary, Phone book, Configuration

✅ Best Practices

  1. Use interface type: List<String> list = new ArrayList<>();
  2. Specify generic type: ArrayList<String> (avoid raw types)
  3. Initialize with capacity: new ArrayList<>(100) if size known
  4. Use appropriate collection: Choose based on requirements
  5. Check before operations: isEmpty(), contains() មុនពេលប្រើ

⚠️ Common Mistakes

កំហុស ហេតុផល ដំណោះស្រាយ
ConcurrentModificationException Modify collection during iteration Use Iterator.remove() ឬ iterate copy
IndexOutOfBoundsException Access invalid index Check size() before get()
NullPointerException Null values in operations Check for null before use
Raw types ArrayList list = new ArrayList() Use generics: ArrayList<String>
Java Code
Click "Run" to execute the Java code