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?
- Dynamic Size: ទំហំបន្ថែម/ថយដោយស្វ័យប្រវត្តិ (ផ្ទុយពី arrays)
- Ready-made Methods: add, remove, search, sort មានរួចហើយ
- Different Data Structures: List, Set, Map, Queue...
- Performance: Optimized algorithms
- Interoperability: Collections ធ្វើការជាមួយគ្នាបាន
- 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
- Use interface type: List<String> list = new ArrayList<>();
- Specify generic type: ArrayList<String> (avoid raw types)
- Initialize with capacity: new ArrayList<>(100) if size known
- Use appropriate collection: Choose based on requirements
- 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