Java so sánh iterator và iterable năm 2024

Fuction trong Enumeration đều có trong Iteration: hasMoreElements() ~ hasNext(), nextElement() ~ next()

2. Khác nhau:

  • Enumeration như là Read-only interface, Iterator có thể remove object trong Collection, Iterator has remove() method. Iterator sử dụng an toàn hơn Enumerator, vì iterator sẽ ném ra ngoại lệ khi có sự thay đổi trong quá trình duyệt iterator, xem fail-fast iterator.

Iterator trong Java là một interface được sử dụng để thay thế Enumerations trong Java Collection Framework. Bạn có thể sử dụng interator để:

  • Duyệt các phần tử từ đầu đến cuối của một collection.
  • Iterator cho phép xóa phần tử khi lặp một collection.

Các phương thức của Iterator trong Java

Có ba phương thức trong Iterator như sau:

Phương thứcMô tả public boolean hasNext()Nó trả về true nếu iterator còn phần tử kế tiếp phần tử đang duyệt. public object next()Nó trả về phần tử hiện tại và di chuyển con trỏ trỏ tới phần tử tiếp theo. public void remove()Nó loại bỏ phần tử cuối được trả về bởi Iterator. Nó hiếm khi được sử dụng.

ListIterator interface

Đối với các collections mà implement List, bạn cũng có thể sử dụng iterator bằng cách gọi ListIterator.

Các phương thức của ListIterator trong Java

Phương thứcMô tả public void add(Object obj) Chèn obj vào phía trước phần tử sẽ được trả về bởi lệnh gọi tiếp theo tới next(). public boolean hasNext() Trả về true nếu có phần tử tiếp theo. Nếu không, trả về false. public boolean hasPrevious() Trả về true nếu có phần tử trước. Nếu không, trả về false. public Object next() Trả về phần tử tiếp theo. Một NoSuchEuityException được ném nếu không có phần tử tiếp theo. public int nextIndex() Trả về chỉ mục của phần tử tiếp theo. Nếu không có phần tử tiếp theo, trả về kích thước của danh sách. public Object previous() Trả về phần tử trước. Một NoSuchEuityException được ném nếu không có phần tử trước đó. public int previousIndex() Trả về chỉ mục của phần tử trước. Nếu không có phần tử trước, trả về -1. public void remove() Loại bỏ các phần tử hiện tại khỏi danh sách. Một IllegalStateException được ném nếu remove() được gọi trước next() hoặc trước previous(). public void set(Object obj) Chỉ định obj cho phần tử hiện tại. Đây là phần tử được trả về lần cuối bởi một lệnh gọi tới next() hoặc previous().

Dưới đây là một ví dụ minh họa sử dụng Iterator và ListIterator trong Java. Nó sử dụng một đối tượng ArrayList.

Nói đến Iterator thì bạn sẽ muốn duyệt qua các phần tử trong một tập hợp. Ví dụ, bạn có thể muốn hiển thị mỗi phần tử.

Cách đơn giản nhất để thực hiện điều này là gọi đến một Iterator, là một đối tượng mà triển khai Iterator hoặc List Iterator interface.

Một đối tượng Iterator là có khả năng duyệt qua phần tử, lấy phần tử, loại bỏ phần tử khỏi tập hợp. Thường trước khi truy cập một tập hợp, bạn phải có một Iterator. Các tập hợp đều cung cấp phương thức iterator để lấy Iterator bắt đầu của tập hợp.

Trước khi bạn có thể truy cập một Collection thông qua một Iterator, bạn phải có được nó. Mỗi lớp Collection cung cấp một phương thức iterator() mà trả về một iterator tới phần bắt đầu của Collection. Bởi sử dụng đối tượng Iterator, bạn có thể truy cập mỗi phần tử trong Collection, từng phần tử một tại một thời điểm.

Nói chung, để sử dụng một iterator để tuần hoàn qua các nội dung của một Collection, bạn theo các bước sau:

  • Đạt được một iterator tới phần đầu của Collection bằng cách gọi phương thức iterator() của Collection trong Java.
  • Thiết lập một vòng lặp mà tạo triệu hồi tới hasNext(). Vòng lặp này lặp đi lặp lại tới khi hasNext() trả về true.
  • Trong vòng lặp, thu được mỗi phần tử bởi triệu hồi phương thức next().

Ví dụ đơn giản

Sử dụng Iterator để hiển thị nội dung LinkedList

import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class IteratorDemo { public static void main(String args[]) { ArrayList<String> list = new ArrayList<>(); // them phan tu vao array list list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); list.add("F"); // su dung iterator de hien thi noi dung cua list System.out.println("Danh sach n: "); Iterator<String> itr = list.iterator(); while (itr.hasNext()) { Object element = itr.next(); System.out.println(element); } System.out.println(); // sua cac phan tu duoc lap ListIterator<String> litr = list.listIterator(); while (litr.hasNext()) { Object element = litr.next(); litr.set(element + " "); } System.out.println("Noi dung da duoc sua cua list: "); itr = list.iterator(); while (itr.hasNext()) { Object element = itr.next(); System.out.println(element); } System.out.println(); // hien thi cac phan tu theo thu tu nguoc lai System.out.println("Noi dung da duoc sua cua list "
  • "theo thu tu nguoc lai: "); while (litr.hasPrevious()) { Object element = litr.previous(); System.out.println(element); } System.out.println(); // xoa phan tu C litr = list.listIterator(); while (litr.hasNext()) { Object element = litr.next(); if ("C".equals(element.toString())) { litr.remove(); } } System.out.println("Noi dung da duoc sua cua list: "); itr = list.iterator(); while (itr.hasNext()) { Object element = itr.next(); System.out.println(element); } System.out.println(); } }

Các phương thức và miêu tả

1. boolean hasNext( )

Trả về true nếu có nhiều phần tử. Nếu không là false.

2. Object next( )

Trả về phần tử kế tiếp. Ném NoSuchElementException nếu không có một phần tử kế tiếp.

3. void remove( )

Gỡ bỏ phần tử hiện tại. Ném IllegalStateException nếu cố gắng gọi phương thức remove() mà không được đặt trước một triệu hồi tới next().

Sự liên quan giữa Iterator và Iterable

Iterator và Iterable có sự liên quan chặt chẽ với nhau.

Ta thử Coi Iterator là một giao diện giúp chúng ta duyệt qua bộ sưu tập với sự trợ giúp của một số phương thức không xác định như hasNext(), next() và remove().

Mặt khác, Iterable là một giao diện khác, nếu được triển khai bởi một lớp sẽ buộc lớp đó có thể lặp và là mục tiêu cho cấu trúc For-Each. Nó chỉ có một phương thức có tên iterator () xuất phát từ chính giao diện Iterator.

Khi một bộ sưu tập có thể lặp lại, thì nó có thể được lặp lại bằng cách sử dụng một trình vòng lặp.

Tóm lại:

Iterator trong Java là một interface được sử dụng để thay thế Enumerations trong Java Collection Framework. Bạn có thể sử dụng iterator để:

What is the difference between iterator and iterable in Java?

Both `Iterator` and `Iterable` are interfaces in Java that look very similar and are often confusing for beginners, but both are two different things. In short, if any class implements the Iterable interface, it gains the ability to iterate over an object of that class using an Iterator.

Can a collection be iterated using an iterator?

If a collection is iterable, then it can be iterated using an iterator (and consequently can be used in a for each loop.) The iterator is the actual object that will iterate through the collection. FYI a java.util.Collection always implements java.util.Iterable. Is it not java.lang.Iterable ?

How do you iterate over an array in Java?

The java.lang.Iterable interface is for objects that can provide an iterator. It is possible to iterate over an array using the for -each loop, though java arrays do not implement Iterable; iterating is done by JVM using a non-accessible index in the background.

How do I implement a Iterable interface?

The Iterable interface is usually implemented by a collection of some sort. In your case, it is the Prison class, not the PrisonCell that could be declared to implement Iterable<PrisonCell>. * It would need to implement a single method: iterator (), which would return an Iterator<PrisonCell>. What object to return?

Chủ đề