Trình lặp trong Java – cách tạo trình lặp trong java

Cổng thông tin Khoa học Máy tính dành cho những người yêu thích máy tính. Nó bao gồm các bài báo về khoa học máy tính và lập trình được viết tốt, được tư duy tốt và được giải thích tốt, các câu đố và thực hành / lập trình cạnh tranh / các câu hỏi phỏng vấn công ty.

Bạn đang xem : cách tạo trình vòng lặp trong java

Con trỏ Java là một Trình lặp lại, được sử dụng để lặp lại hoặc duyệt hoặc truy xuất các phần tử của đối tượng Bộ sưu tập hoặc Luồng từng cái một. Có ba con trỏ trong Java .

  1. Trình lặp
  2. Liệt kê
  3. ListIterator

< blockquote>

Lưu ý: SplitIterator cũng có thể được coi là con trỏ vì nó chỉ là một loại Iterator.

1. Trình lặp lại

Trình lặp trong Java được sử dụng trong khuôn khổ Bộ sưu tập để truy xuất từng phần tử một. Nó là một trình lặp phổ quát vì chúng ta có thể áp dụng nó cho bất kỳ đối tượng Bộ sưu tập nào. Bằng cách sử dụng Iterator, chúng ta có thể thực hiện cả thao tác đọc và loại bỏ. Đây là phiên bản cải tiến của Enumeration với chức năng bổ sung là xóa một phần tử.

Phải sử dụng Iterator bất cứ khi nào chúng ta muốn liệt kê các phần tử trong tất cả các giao diện được triển khai của khuôn khổ Bộ sưu tập như Set, List, Queue, Deque và tất cả các lớp được triển khai của giao diện Bản đồ. Iterator là con trỏ duy nhất có sẵn cho toàn bộ khung sưu tập.
Đối tượng Iterator có thể được tạo bằng cách gọi phương thức có trong giao diện Bộ sưu tập.

Cú pháp:

 Iterator itr = c.  iterator  (); 

Lưu ý: Ở đây “c” là bất kỳ Đối tượng sưu tập. itr thuộc loại giao diện Iterator và tham chiếu đến “c”.

Các phương thức của Giao diện Iterator trong Java

Giao diện Iterator định nghĩa các phương thức ba là được liệt kê bên dưới:

1. hasNext (): Trả về true nếu lần lặp có nhiều phần tử hơn.

 public boolean hasNext (); 

2. next (): Trả về phần tử tiếp theo trong vòng lặp. Nó ném NoSuchElementException nếu không có phần tử nào nữa.

 public Object next (); 

3. remove (): Loại bỏ phần tử tiếp theo trong vòng lặp. Phương thức này chỉ có thể được gọi một lần cho mỗi lần gọi tới next ().

 public void remove (); 

phương thức có thể đưa ra hai ngoại lệ như sau:

  • Nếu thao tác remove không được trình lặp này hỗ trợ
  • Nếu phương thức tiếp theo chưa được gọi hoặc phương thức remove đã được gọi sau lần gọi cuối cùng đến phương thức tiếp theo.

Java Iterator hoạt động nội bộ như thế nào?

Trong phần này, chúng ta sẽ cố gắng hiểu cách Java Iterator và nó các phương pháp hoạt động nội bộ. Hãy để chúng tôi sử dụng đối tượng LinkedList sau để hiểu chức năng này.

 Danh sách & lt; Chuỗi & gt; city ​​= new LinkedList & lt; & gt; ();
thành phố.add ("G-1");
thành phố.add ("G-2");
thành phố.add ("G-3");
.
.
.
city.add ("G-n"); 

Bây giờ, chúng ta hãy tạo một đối tượng Iterator trên đối tượng List như hình dưới đây:

 Iterator & lt; String & gt; thành phốIterator = thành phố.iterator (); 

Trình lặp “thành phốIteartor” sẽ trông giống như –

Ở đây Con trỏ của Iterator đang trỏ đến trước phần tử đầu tiên của Danh sách.

Bây giờ, chúng ta sẽ chạy đoạn mã sau. < / p>

 cityIterator.hasNext ();
cityIterator.next (); 

Khi chúng tôi chạy đoạn mã trên, Con trỏ của Iterator trỏ đến phần tử đầu tiên trong danh sách như được hiển thị trong sơ đồ trên.

Bây giờ, chúng tôi sẽ chạy đoạn mã sau.

 cityIterator.hasNext ();
cityIterator.next (); 

Khi chúng ta chạy đoạn mã trên, Con trỏ của Iterator trỏ đến phần tử thứ hai trong danh sách như trong sơ đồ trên. Thực hiện quá trình này để truy cập Con trỏ của Iterator đến phần tử cuối của Danh sách.

Sau khi đọc phần tử cuối cùng, nếu chúng tôi chạy đoạn mã dưới đây, đoạn mã sẽ trả về giá trị“ false ”.

 cityIterator.hasNext (); 

Khi Con trỏ của Iterator trỏ đến sau dấu chấm cuối cùng phần tử của Danh sách, phương thức hasNext () trả về một giá trị sai.

Lưu ý: Sau khi quan sát tất cả các sơ đồ này, chúng ta có thể nói rằng Java Iterator chỉ hỗ trợ Lặp lại hướng chuyển tiếp như được hiển thị trong sơ đồ bên dưới. Vì vậy, nó còn được gọi là Con trỏ đơn hướng.

Ví dụ:

Java

nhập java.util.ArrayList;

nhập java.util.Iterator;

public mệnh đề ss Kiểm tra {

public static void main (String [] args)

{

ArrayList & lt; Integer & gt; al = new ArrayList & lt; Integer & gt; ();

cho ( int i = 0 ; i & lt; 10 ; i ++)

al.add (i);

System.out.println (al);

Iterator & lt; Integer & gt; itr = al.iterator ();

while (itr.hasNext ()) {

int i = itr.next ();

System.out.print (i + " " );

if (i% 2 ! = 0 )

< p class = "line number40 index39 alt1"> itr.remove ();

}

System.out.println ();

< p class = "line number45 index44 alt2">

System.out.println (al);

}

}

 
 

Đầu ra

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 1 2 3 4 5 6 7 8 9
[0, 2, 4, 6, 8] 

SplitIterator

Spliterator, giống như các Trình lặp khác, dùng để duyệt các phần tử của nguồn. Nguồn có thể là Bộ sưu tập , kênh IO hoặc chức năng của trình tạo. Nó được bao gồm trong JDK 8 để hỗ trợ truyền tải song song hiệu quả (lập trình song song) ngoài truyền tải tuần tự. Giao diện Java Spliterator là một trình lặp nội bộ chia luồng thành các phần nhỏ hơn. Các phần nhỏ hơn này có thể được xử lý song song.

Lưu ý: Trong lập trình thực tế, chúng ta có thể không bao giờ cần sử dụng trực tiếp Spliterator. Trong các hoạt động bình thường, nó sẽ hoạt động giống hệt như Java Iterator.

Ưu điểm của Java Iterator

  • Chúng ta có thể sử dụng nó cho bất kỳ lớp Collection nào.
  • Nó hỗ trợ cả thao tác ĐỌC và XÓA.
  • Đây là con trỏ chung cho API thu thập.
  • Tên phương thức rất đơn giản và dễ sử dụng.

Ngoài ra, có một số hạn chế nhất định của Iterator được liệt kê như sau:

Các hạn chế của lặp lại Java

  • Trong Hoạt động CRUD, nó KHÔNG hỗ trợ các hoạt động TẠO và CẬP NHẬT.
  • Nó chỉ hỗ trợ lặp lại hướng chuyển tiếp là một Trình lặp lại đơn hướng.
  • So sánh với Spliterator , nó KHÔNG hỗ trợ các phần tử lặp song song, có nghĩa là nó chỉ hỗ trợ Lặp lại tuần tự.
  • So với Spliterator, nó KHÔNG hỗ trợ hiệu suất tốt hơn để lặp lại khối lượng lớn dữ liệu.

2. Enumeration

Đây là một giao diện được sử dụng để lấy các phần tử của tập hợp kế thừa (Vector, Hashtable). Enumeration là trình lặp đầu tiên có mặt từ JDK 1.0, các phần còn lại được đưa vào JDK 1.2 với nhiều chức năng hơn. Các phép liệt kê cũng được sử dụng để chỉ định các luồng đầu vào cho a. Chúng ta có thể tạo một đối tượng Enumeration bằng cách gọi phương thức của lớp vector trên bất kỳ đối tượng vector nào

 // Ở đây "v" là một đối tượng lớp Vector. e là của
// nhập giao diện Enumeration và tham chiếu đến "v"
Enumeration e =  v .  element  (); 

hai phương pháp trong Giao diện liệt kê cụ thể là:

1. public boolean hasMoreElements (): Phương thức này kiểm tra xem kiểu liệt kê này có chứa nhiều phần tử hơn hay không.

2. public Object nextElement (): Phương thức này trả về phần tử tiếp theo của kiểu liệt kê này. Nó ném NoSuchElementException nếu không có phần tử nào nữa

Java

< p class = "ring-load" id = "create-url-loader">

nhập java.util.Enumeration;

nhập java.util.Vector;

công khai class Kiểm tra

{

public static void main (String [] args)

{

< p class = "line number14 index13 alt1">

Vectơ v = mới Vector ();

cho ( int i = < / code> 0 ; i & lt; 10 ; i ++)

v.addElement ( i);

Hệ thống .out.println (v);

Bảng kê e = v.elements ();

trong khi (e.hasMoreElements ())

{

int < code class = "trơn"> i = (Integer) e.nextElement ();

System.out.print (i + "" );

}

}

}

 
 

< p>

Đầu ra:

< trước> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 1 2 3 4 5 6 7 8 9

Có một số hạn chế nhất định của phép liệt kê như sau:

    < li> Enumeration chỉ dành cho các lớp kế thừa (Vector, Hashtable). Do đó, nó không phải là một trình lặp phổ biến.
  • Không thể thực hiện các thao tác xóa bằng cách sử dụng Enumeration.
  • Chỉ có thể lặp lại hướng về phía trước.

Điểm giống nhau giữa Liệt kê Java và Trình lặp lại

  • Cả hai đều là Con trỏ Java.
  • Cả hai đều được sử dụng để lặp lại một Tập hợp các phần tử đối tượng từng cái một.
  • Cả hai hỗ trợ hoạt động ĐỌC hoặc Truy xuất.
  • Cả hai đều là Con trỏ Java đơn hướng, có nghĩa là chỉ hỗ trợ Lặp lại hướng chuyển tiếp.

Sự khác biệt giữa Liệt kê Java và Trình lặp lại

< p>

Bảng sau mô tả sự khác biệt giữa Java Enumeration và Iterator:

EnumerationIteratorIntroduction trong Java 1.0Giới thiệu trong Java 1.2Legacy InterfaceNot Legacy InterfaceIt chỉ được sử dụng để lặp lại Legacy Các lớp Collection: Chúng ta có thể sử dụng nó cho bất kỳ lớp Collection nào. e và các tên phương thức dễ sử dụng.

3. ListIterator

Nó chỉ áp dụng cho các lớp được triển khai tập hợp Danh sách như ArrayList, LinkedList, v.v. Nó cung cấp phép lặp hai chiều. ListIterator phải được sử dụng khi chúng ta muốn liệt kê các phần tử của List. Con trỏ này có nhiều chức năng (phương thức) hơn trình lặp. Đối tượng ListIterator có thể được tạo bằng cách gọi phương thức có trong giao diện Danh sách.

 ListIterator ltr = l.  listIterator  ();  

Lưu ý: Ở đây “l” là bất kỳ đối tượng Danh sách nào, ltr là loại. Giao diện ListIterator và tham chiếu đến “l”. Giao diện ListIterator mở rộng giao diện Iterator. Vì vậy, cả ba phương thức của giao diện Iterator đều có sẵn cho ListIterator. Ngoài ra, có sáu phương pháp khác.

1. Hướng chuyển tiếp

1.1 hasNext (): Trả về true nếu phép lặp có nhiều phần tử hơn

 public boolean hasNext (); 

1.2 next (): Tương tự như phương thức next () của Iterator. Trả về phần tử tiếp theo trong vòng lặp.

 public Object next (); 

1.3 nextIndex (): Trả về chỉ mục phần tử tiếp theo hoặc kích thước danh sách nếu trình lặp danh sách ở cuối danh sách.

 public int nextIndex (); 

2. Hướng lùi

2.1 hasPrevious (): Trả về true nếu phép lặp có nhiều phần tử hơn trong khi chuyển hướng ngược lại.

 public boolean hasPrevious (); 

2.2 before (): Trả về phần tử trước đó trong lần lặp và có thể ném NoSuchElementException nếu không còn phần tử nào nữa.

 public Object before (); 

2.3 beforeIndex ( ): Trả về chỉ mục phần tử trước đó hoặc -1 nếu trình lặp danh sách ở đầu danh sách,

 public int beforeIndex (); 

3. Các phương thức khác

3.1 remove (): Giống như phương thức remove () của Iterator. Loại bỏ phần tử tiếp theo trong lần lặp lại.

 public void remove (); 

3.2 set (Object obj ): Thay thế phần tử cuối cùng được trả về bởi next () hoặc trước () bằng phần tử được chỉ định.

 public void set (Object obj); 

3.3 add (Object obj): Chèn phần tử được chỉ định vào danh sách ở vị trí trước phần tử sẽ được trả về bởi next () < / p>

 public void add (Object obj); 

Rõ ràng, ba phương thức kế thừa từ Iterator (và) làm hoàn toàn giống nhau trong cả hai giao diện. Các hoạt động trước và sau là tương tự chính xác của và. Các thao tác trước đây tham chiếu đến phần tử trước con trỏ (ngầm định), trong khi thao tác sau tham chiếu đến phần tử sau con trỏ. Thao tác trước di chuyển con trỏ về phía sau, trong khi thao tác tiếp theo di chuyển con trỏ về phía trước.

ListIterator không có phần tử hiện tại; vị trí con trỏ của nó luôn nằm giữa phần tử sẽ được trả về bởi một lệnh gọi đến và phần tử sẽ được trả về bởi một lệnh gọi tới

phương thức có thể ném 4 ngoại lệ.

  • nếu hoạt động tập hợp không được trình lặp danh sách này hỗ trợ
  • Nếu lớp của phần tử được chỉ định ngăn nó được thêm vào danh sách này
  • Nếu một số khía cạnh của phần tử đã chỉ định ngăn phần tử đó được thêm vào danh sách này
  • Nếu cả phần tử tiếp theo và phần tử trước đó đều không được gọi hoặc xóa hoặc thêm phần tử được gọi sau lần gọi cuối cùng tới phương thức tiếp theo hoặc trước đó

có thể đưa ra 3 ngoại lệ.

  • Nếu trình lặp danh sách này không hỗ trợ phương thức add
  • Nếu lớp của phần tử được chỉ định ngăn không cho nó được thêm vào danh sách này
  • Nếu một số khía cạnh của yếu tố này ngăn không cho nó được thêm vào danh sách này

Ví dụ:

Java

nhập java.util.ArrayList;

nhập java.util.ListIterator;

public class Kiểm tra {

public static void main (String [] args)

< code class = "trơn"> {

ArrayList al = new ArrayList ();

cho ( int i = 0 ; i & lt; < / code> 10 ; i ++)

al.add (i);

System.out.println (al);

< / code>

ListIterator ltr = al.listIterator ();

< p class = "line number31 index30 alt2"> while (ltr.hasNext () ) {

< code class = "undefined space"> int i = (Số nguyên) ltr.next ();

System.out.print (i + "" );

< / code>

if (i% 2 == 0 ) {

i ++;

ltr.set (i);

ltr.add (i);

}

< p class = "line number49 index48 alt2"> }

System.out.println ();

System.out.println (al); < / p>

}

}

  
 

Đầu ra:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 1 2 3 4 5 6 7 8 9
[1, 1, 1, 3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9] 

Lưu ý: Tương tự, có một số hạn chế nhất định với ListIterator . Đây là trình lặp mạnh mẽ nhất nhưng nó chỉ có thể áp dụng cho các lớp được triển khai trong Danh sách, vì vậy nó không phải là trình lặp phổ biến.

Các điểm quan trọng

  1. Xin lưu ý rằng ban đầu, bất kỳ tham chiếu trình lặp nào sẽ trỏ đến chỉ mục ngay trước chỉ mục của phần tử đầu tiên trong một tập hợp.
  2. Chúng tôi không tạo các đối tượng Enumeration, Iterator, ListIterator bởi vì chúng là giao diện. Chúng tôi sử dụng các phương thức như element (), iterator (), listIterator () để tạo các đối tượng. Các phương thức này có Lớp bên trong ẩn danh mở rộng các giao diện tương ứng và trả về đối tượng lớp này.

Lưu ý: The $ trong tên lớp tham chiếu là bằng chứng cho thấy khái niệm các lớp bên trong được sử dụng và các đối tượng lớp này được tạo ra.

Điều này có thể được xác minh bằng mã bên dưới. Để biết thêm về lớp bên trong, hãy tham khảo

Java

< p class = "line number2 index1 alt1">

nhập < / code> java.util.Enumeration;

nhập < code class = "trơn"> java.util.Iterator;

nhập java.util.ListIterator;

nhập java .util.Vector;

public class GFG {

public static void main (String [] args)

{

Vectơ v = new Vector ();

Liệt kê e = v.elements ( );

Iterator itr = v.iterator () ;

ListIterator ltr = v.listIterator ();

< / code> System.out.println (e.getClass (). getName ());

System.out.println (itr.getClass (). getName ());

System.out.println (ltr.getClass (). getName ());

}

}

 
 

Đầu ra

 java.util.Vector $ 1
java.util.Vector $ Itr
java.util.Vector $ ListItr 

Ghi chú cá nhân của tôi


Xem thêm những thông tin liên quan đến chủ đề cách tạo trình lặp trong java

Java 27a. Giới thiệu về mảng trong lập trình Java | Phần 1 - Lập Trình Java Cơ Bản

alt

  • Tác giả: TITV
  • Ngày đăng: 2021-06-03
  • Đánh giá: 4 ⭐ ( 3069 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: ★ Khóa học miễn phí LậpTrìnhJava: https://bit.ly/2XSfJsO ★ LậpTrìnhC: https://bit.ly/3k7sA2B ★ Ủng hộ phát triển kênh: Momo,ZaloPay,ViettelPay: 0374568701 / STK: 109005606811 Vietinbank – CTK: Le Nhat Tung. ★ Link tải code: https://bit.ly/3AwCNeX
    ★ Khóa học Lập trình Java: bao gồm tất cả nội dung kiến thức về các công cụ lập trình IDE, Java Core, Các thuật toán, Lập trình hướng đối tượng Java, Cấu trúc dữ liệu Java, Xử lý tập tin trong Java, Lập trình giao diện AWT và Swing, Lập trình mạng Java, Sử dụng Java để tương tác với cơ sở dữ liệu, Lập trình xây dựng ứng dụng website trên nền tảng Java web, JSP và Servlet.
    Khóa học này cung cấp phần lớn kiến thức và kỹ năng về ngôn ngữ lập trình java và là bước đệm cho các lập trình viên muốn tìm hiểu tiếp ngôn ngữ lập trình Android.
    Khóa học này phù hợp cho các bạn mới bắt đầu học Lập trình Java, hoặc các bạn muốn ôn tập lại kiến thức một cách hệ thống và mạch lạc để chuẩn bị đi làm.
    ★ Bạn cũng có thể tìm thấy các khóa học về ngôn ngữ khác tại đây: https://www.youtube.com/c/TITVvn
    ★ Cácn bạn vui lòng đăng ký kênh (Subscribe) và chia sẻ video (Share) đến các bạn cùng lớp nhé.
    ★ Diễn đàn hỏi đáp: https://www.facebook.com/groups/titv.vn
    ★ Facebook: https://www.facebook.com/tung.lenhat
    ★ Website: http://titv.vn, http://titv.edu.vn
    =================================
    ✩ Hộp thư đóng góp ý kiến hoặc ý tưởng: lenhattung@gmail.com
    =================================
    © Bản quyền thuộc về TITV ☞ Vui lòng không đăng tải lại Video từ kênh này
    © Copyright by TITV Channel ☞ Do not Re-up

Vòng lặp while trong java

  • Tác giả: viettuts.vn
  • Đánh giá: 3 ⭐ ( 7491 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Vòng lặp while trong java được sử dụng để lặp một phần của chương trình một vài lần. Nếu số lần lặp không được xác định trước thì vòng lặp lặp while được

Cách sử dụng vòng lặp for trong java

  • Tác giả: nguyenvanhieu.vn
  • Đánh giá: 3 ⭐ ( 1456 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Vòng lặp for trong Java - Bài viết này sẽ giúp các bạn hiểu cách thức hoạt động của vòng lặp for trong java cũng như cách sử dụng chúng.

Vòng lặp trong Java

  • Tác giả: openplanning.net
  • Đánh giá: 5 ⭐ ( 9113 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Hướng dẫn: Cách sử dụng cho mỗi vòng lặp trong Java với mảng chi tiết

  • Tác giả: box.edu.vn
  • Đánh giá: 5 ⭐ ( 8719 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hướng dẫn chi tiết sử dụng vòng lặp trong Java với mảng giúp lập trình viên dễ dàng chuyển đổi và xử lý số liệu chuyên nghiệp và nhanh chóng

[Tự học java] Vòng lặp for trong Java

  • Tác giả: cafedev.vn
  • Đánh giá: 3 ⭐ ( 9796 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Vòng lặp được sử dụng trong lập trình để lặp lại một khối code nào đó. Trong bài viết này, bạn sẽ học cách tạo một vòng lặp for trong lập trình Java.

Vòng lặp for, while, do – while trong java

  • Tác giả: thaynhuom.edu.vn
  • Đánh giá: 5 ⭐ ( 5621 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Kiến thức về vòng lặp là một trong những kiến thức quan trọng không thể thiếu trong lập trình (vòng lặp for, while và do-while).

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  315 Thắt lưng nam cao cấp hiệu Tâm Anh, dây nịt da thật 100% - xu hướng logo 2018