CodeGym/Blog Java/Ngẫu nhiên/Trình lặp Java

Trình lặp Java

Xuất bản trong nhóm
CHÀO! Trong bài hôm nay, chúng ta sẽ nói về Java Iterator. Hãy tưởng tượng rằng bạn đến thư viện và muốn tìm một cuốn sách cụ thể. Bạn làm nó như thế nào? Nếu nó không hư cấu, thì có Hệ thống thập phân Dewey. Nếu là hư cấu, chúng được sắp xếp theo thứ tự bảng chữ cái theo họ của chúng. Bất cứ điều gì bạn đang tìm kiếm, tại một thời điểm nào đó, bạn phải xem qua từng cuốn sách cho đến khi bạn tìm thấy thứ mình đang tìm kiếm. Bất cứ khi nào bạn có một bộ sưu tập các thứ trong Java, cho dù nó được lưu trữ trong Array , ArrayList , Queue hay List , làm thế nào để bạn tìm thấy giá trị cụ thể? Tại một số thời điểm, bạn phải đi qua từng yếu tố một. Đây là những gì một trình vòng lặp Java dành cho.Cách sử dụng Java Iterator: Hướng dẫn ngắn gọn - 1

Iterator trong Java là gì

Trình vòng lặp trong Java là gì? Đó là một cách xem xét từng phần tử trong một bộ sưu tập. Và theo bộ sưu tập, chúng tôi muốn nói đến bất kỳ thứ gì trong lớp Bộ sưu tập . Điêu nay bao gôm:
  • Lập danh sách
  • Bộ băm
  • LinkedHashSet
  • LinkedList
  • Hàng đợi ưu tiên
  • véc tơ
  • và nhiều người khác…
Nó cũng bao gồm các giao diện khác nhau cho các lớp đó, chẳng hạn như Set , List , Queue , DequeueSorted Set , v.v. Iterator<E> là phương thức giao diện chung của lớp Interface Iterator<E> . Nó được đưa vào Java 1.2 và thay thế Enumeration như một cách để kiểm tra các phần tử tuần tự trong một tập hợp.

Tại sao bạn không nên sử dụng vòng lặp For làm Iterator trong Java

Một trong những cách đầu tiên mà mọi người được dạy để lặp qua một bộ sưu tập trong Java là vòng lặp. Nó trông như thế này:
class Main {
  public static void main(String[] args) {
    int exampleArray[] = new int[10];

    //fill array with data

    for(int x = 0; x < exampleArray.length; x++) {
      System.out.println("Content of element " + x + "is: " + exampleArray[x]);
    }
  }
}
Đầu ra sẽ là một danh sách có nội dung:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Điều này có công dụng của nó, nhưng điều gì sẽ xảy ra nếu bộ sưu tập không lưu trữ các phần tử trong một hệ thống dựa trên chỉ mục? Ví dụ, Set s bình thường không có thứ tự. Vì vậy, bạn nên bỏ thói quen sử dụng vòng lặp for làm trình vòng lặp trong Java và thay vào đó hãy thực hành sử dụng lớp Iterator<E> . Dưới đây là một số ví dụ về trình vòng lặp java.

Cách sử dụng Iterator trong Java

Dưới đây là một số ví dụ về cách sử dụng iterator trong Java. Khi sử dụng lớp iterator, có ba cách để duyệt qua một bộ sưu tập. Bạn có thể sử dụng vòng lặp while() , vòng lặp for() và vòng lặp forEach() . Lưu ý rằng vòng lặp for này khác với vòng lặp mà chúng ta đã nói trước đây. Dưới đây là ba ví dụ java iterator khác nhau. Trước tiên, hãy thiết lập Bộ sưu tập để lặp lại.
import java.util.*; // imports ArrayList, Collection and Iterator

class Main {
  public static void main(String[] args) {
    Collection<String> example = new ArrayList<String>();

    example.add("Item 1");
    example.add("Item 2");
    example.add("Item 3");
    example.add("Item 4");
  }
}
Đây là một Bộ sưu tập đơn giản được tạo thành từ một ArrayList mà chúng tôi đã tải bốn mục vào đó. Bây giờ hãy xem ba phương thức sử dụng lớp Iterator để duyệt qua ArrayList .

Trong khi lặp lại

Iterator<String> iterator = example.iterator();

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
Vòng lặp while() này sử dụng phương thức Boolean .hasNext() của lớp Iterator để kiểm tra xem có phần tử future hay không. Nếu điều kiện tiên quyết là đúng, thì nó sẽ tiếp tục. Nếu nó trả về là false thì vòng lặp kết thúc. Phần quan trọng ở đây là cả hai phương thức .hasNext().next() đều thực hiện kiểm tra ban đầu phần tử đầu tiên. Nếu Bộ sưu tập trống và không có phần tử đầu tiên, thì phương thức này trả về false cho .hasNext () và sẽ đưa ra một NoSuchElementException cho phương thức .next() .

cho vòng lặp

for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
Điều này trông giống như một vòng lặp for truyền thống hơn. Nó sử dụng phương thức .hasNext() làm phần kiểm tra và thay đổi điều kiện. Việc khởi tạo là cuộc gọi đến Iterator.

Dành cho: Mỗi vòng lặp

for (String s : example) {
  System.out.println("Element Value= " + s);
}
Vòng lặp For:Each là một vòng lặp for nhưng nếu bạn không biết cách đọc thì có thể hơi khó hiểu. Cú pháp của vòng lặp For:Eachfor (data_type variableName : collectionName){ body} . Điều này cho: mỗi vòng lặp có một vài nhược điểm. Đầu tiên, nó chỉ có thể đi qua bộ sưu tập theo một hướng. Thứ hai, bạn phải lặp qua từng phần tử. Bạn không thể bỏ qua bất kỳ trong số họ. Nhưng với tư cách là một trình lặp danh sách thuận tiện trong Java, đó là tùy chọn tốt nhất. Về mặt tích cực, vòng lặp for: each rất dễ đọc và một khi bạn đã biết nó thì rất khó để hiểu sai. Nếu bạn đang thắc mắc đầu ra của ba vòng lặp là gì, thì chúng đều giống nhau:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4

Cách sử dụng Iterator trong Java cho Bản đồ

Bản đồ là một cách phổ biến để lưu trữ dữ liệu nhưng vì chúng không mở rộng Bộ sưu tập nên bạn không thể sử dụng các trình vòng lặp trước đó để duyệt trực tiếp bản đồ. Vậy làm thế nào để bạn sử dụng một trình vòng lặp trong Java để đi qua Map s và HashMap s? Có bốn phương pháp lặp bản đồ Java tốt. Chúng tôi sẽ bao gồm chúng riêng lẻ. Đầu tiên, hãy tải một bản đồ với một loạt các giá trị.
import java.util.*; //imports Map and HashMap

class Main {
  public static void main(String[] args) {
    Map<String, String> example = new HashMap<String, String>();

    example.put("alpha", "one");
    example.put("beta", "two");
    example.put("gamma", "three");

  }
}

Phương thức trình lặp Hashmap Java: forEach(hành động)

example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Phương pháp này sử dụng biểu thức lambda để lặp lại. Toán tử lambda là phương thức forEach() và phần thân in ra các giá trị. Điều này sử dụng một toán tử nhiều tham số. Đây là phương pháp nhanh nhất và rõ ràng nhất cho trình lặp bản đồ trong Java 8.

Phương thức lặp Hashmap Java: Vòng lặp For:Each()

for (Map.Entry<String, String> iterate : example.entrySet()) {
  System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Điều này sử dụng cú pháp For:Each để gọi phương thức entrySet() trả về một tập hợp có khóa và giá trị làm thành phần của nó. Ngoài ra, khi sử dụng phương thức .Entry() , các đối tượng chỉ đúng khi quá trình lặp này diễn ra.

Phương thức trình lặp Hashmap Java: Map.Entry<k, v>

Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();

while(iterator.hasNext()){
  Map.Entry<String, String> element = iterator.next();
  System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
Phương pháp này một lần nữa chuyển đổi Bản đồ thành một tập hợp để sử dụng Bộ sưu tập Iterator và các phương thức. Đối với ba phương thức lặp này, kết quả trả về sẽ như sau:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
  System.out.println("Key: " + key);
}
for (String value : example.values()) {
  System.out.println("Value: " + value);
}
Cái này trả về các phần tử theo một cách khác. Trước tiên, nó sẽ trả về tất cả các Khóa theo thứ tự và sau đó là tất cả các Giá trị:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào