Các Phương Pháp Duyệt (Iteration) Trong Lập Trình

Các Phương Pháp Duyệt (Iteration)
Trong JAVA

Trong Java, có một số cách để thực hiện vòng lặp để duyệt qua các phần tử của một Collection. Dưới đây là các kiểu vòng lặp phổ biến cùng ví dụ minh họa:

1. Vòng Lặp For

  • Cú Pháp: Sử dụng biến đếm để duyệt qua từng phần tử của danh sách.
  • Ưu Điểm: Quen thuộc, thích hợp khi cần sử dụng biến đếm.
  • Hạn Chế: Yêu cầu biết trước kích thước của danh sách, chỉ sử dụng được với các cấu trúc dữ liệu có thứ tự như ArrayList.
				
					int[] numbers = {1, 2, 3, 4, 5};

for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}
				
			

2. Vòng Lặp For Mở Rộng (Enhanced For Loop)

  • Cú Pháp: Cú pháp ngắn gọn từ Java 5 để duyệt qua các phần tử của danh sách.
  • Ưu Điểm: Gọn nhẹ, ít dễ gây lỗi, dễ đọc.
  • Hạn Chế: Không thể sử dụng để truy cập chỉ số phần tử, không phù hợp nếu cần sử dụng biến đếm.
				
					List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

for (String name : names) {
    System.out.println(name);
}

				
			

3. Phương Pháp Iterator

  • Cú Pháp: Sử dụng Iterator để duyệt qua từng phần tử mà không cần biết trước kích thước của danh sách.
  • Ưu Điểm: Linh hoạt, có thể sử dụng với nhiều loại cấu trúc dữ liệu.
  • Hạn Chế: Cú pháp có thể trở nên dài dòng so với vòng lặp for mở rộng, cần kiểm tra điều kiện hasNext().
				
					List<Integer> values = new ArrayList<>();
values.add(10);
values.add(20);
values.add(30);

Iterator<Integer> iterator = values.iterator();

while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

				
			

4. Phương Pháp forEach với Lambda Expressions (Java 8+)

  • Cú Pháp: Sử dụng phương thức forEach cùng với Lambda Expression để duyệt qua các phần tử.
  • Ưu Điểm: Linh hoạt, tiện lợi, cú pháp ngắn gọn, có thể thực hiện các hành động cụ thể trên từng phần tử.
  • Hạn Chế: Không thể sử dụng để truy cập chỉ số phần tử, đôi khi cú pháp Lambda có thể khó hiểu đối với người mới học.
				
					List<String> listNames = new ArrayList<>();
listNames.add("Tom");
listNames.add("Mary");
listNames.add("Peter");

listNames.forEach(name -> System.out.println(name));