Iterator Java là gì
answer Tran Phuc · Tran Phuc 17:41 28/07/2011 An Iterablelà một đại diện đơn giản của một loạt các yếu tố có thể được lặp đi lặp lại. Nó không có bất kỳ trạng thái lặp như "phần tử hiện tại". Thay vào đó, nó có một phương thức tạo ra một Iterator. An Iteratorlà đối tượng có trạng thái lặp. Nó cho phép bạn kiểm tra nếu nó có nhiều phần tử hơn bằng cách sử dụng hasNext()và chuyển sang phần tử tiếp theo (nếu có) bằng cách sử dụng next(). Thông thường, một Iterablenên có thể tạo ra bất kỳ số Iterators hợp lệ . 163 hữu ích 1 bình luận chia sẻ answer Trịnh Tâm Hằng · Trịnh Tâm Hằng 17:43 28/07/2011 Việc thực hiện Iterablelà một trong đó cung cấp một Iteratorchính nó: public interface Iterable<T> { Iterator<T> iterator(); }Trình lặp là một cách đơn giản để cho phép một số người lặp qua một bộ sưu tập dữ liệu mà không có đặc quyền gán (mặc dù có khả năng loại bỏ). public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }Xem Javadoc . 78 hữu ích 0 bình luận chia sẻ answer Hoàng Gia Nhi · Hoàng Gia Nhi 17:39 28/07/2011 Nếu 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 (và do đó có thể được sử dụng trong mỗi vòng lặp.) Trình vòng lặp là đối tượng thực tế sẽ lặp qua bộ sưu tập. 10 hữu ích 3 bình luận chia sẻ answer Bùi Vy Lan · Bùi Vy Lan 13:30 07/07/2014 Việc thực hiện giao diện Iterable cho phép một đối tượng trở thành mục tiêu của câu lệnh "foreach". Iterator là một giao diện, có triển khai để lặp qua các phần tử. Iterable là một giao diện cung cấp Iterator. 8 hữu ích 4 bình luận chia sẻ answer Tạ Duy Nam · Tạ Duy Nam 01:50 08/12/2017 Tôi sẽ trả lời câu hỏi đặc biệt là về ArrayList làm ví dụ để giúp bạn hiểu rõ hơn ..
public interface Iterable { ... abstract Iterator<T> iterator(); //Returns an 'Iterator'(not iterator) over elements of type T. ... }
public interface Iterator { ... abstract boolean hasNext(); //Returns true if the iteration has more elements. abstract E next(); //Returns the next element in the iteration. ... }
. Và Iterable, Collection and List chỉ khai báo phương thức trừu tượng 'iterator ()' và ArrayList một mình thực hiện nó.
Phương thức 'iterator ()' trả về một đối tượng của lớp 'Itr', thực hiện 'Iterator'. public class ArrayList<E> ... implements List<E>, ... { ... public Iterator<E> iterator() { return new Itr(); } private class Itr implements Iterator<E> { ... public boolean hasNext() { return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } ... } }
public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list.add("f"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String string = iterator.next(); System.out.println(string); } } Bây giờ, nó đã rõ ràng? :) 5 hữu ích 2 bình luận chia sẻ answer Hoàng Hải Nhi · Hoàng Hải Nhi 03:37 27/08/2014 Việc xem xét quan trọng nhất là liệu mục trong câu hỏi có thể được duyệt qua nhiều lần hay không. Điều này là do bạn luôn có thể tua lại Iterable bằng cách gọi lại iterator (), nhưng không có cách nào để tua lại Iterator. 4 hữu ích 0 bình luận chia sẻ answer Trịnh Thu Nguyệt · Trịnh Thu Nguyệt 15:11 07/06/2017 Về cơ bản, cả hai đều có liên quan rất chặt chẽ với nhau. 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. Để hiểu về chuyến thăm này: ITERABLE: http://grepcode.com/file/reposective.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java ITERATOR http://grepcode.com/file/reposective.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java 1 hữu ích 0 bình luận chia sẻ answer Van Thien Duong · Van Thien Duong 05:27 14/11/2017 Như đã giải thích ở đây , The Iterable đã được giới thiệu để có thể sử dụng trong foreachvòng lặp. Một lớp thực hiện giao diện Iterable có thể được lặp lại. Iterator là lớp quản lý việc lặp qua một Iterable . Nó duy trì trạng thái của chúng ta trong vòng lặp hiện tại và biết phần tử tiếp theo là gì và làm thế nào để có được nó. 1 hữu ích 0 bình luận chia sẻ answer Vũ Ðức Long · Vũ Ðức Long 06:08 17/08/2017 Hãy xem xét một ví dụ có 10 quả táo. Khi nó thực hiện Iterable, nó giống như đặt từng quả táo vào các hộp từ 1 đến 10 và trả về một trình vòng lặp có thể được sử dụng để điều hướng. Bằng cách thực hiện iterator, chúng ta có thể nhận được bất kỳ quả táo, quả táo nào trong các hộp tiếp theo, v.v. Vì vậy, việc thực hiện iterable cung cấp cho một trình vòng lặp để điều hướng các phần tử của nó mặc dù để điều hướng, iterator cần phải được thực hiện. 1 hữu ích 0 bình luận chia sẻ answer Trần Thế Uy · Trần Thế Uy 20:02 28/04/2017 Câu hỏi: Sự khác biệt giữa Iterable và Iterator? iterable: Nó liên quan đến vòng lặp forEach Phần tử đích của sự cố vòng lặp forEach có thể lặp lại được. Có thể Chỉ chứa một phương thức iterator () Được giới thiệu trong phiên bản 1.5 0 hữu ích 0 bình luận chia sẻ answer Vũ Mai Liên · Vũ Mai Liên 15:05 31/05/2017 Ngoài câu trả lời của ColinD và Seeker . Nói một cách đơn giản, Iterable và Iterator là cả hai giao diện được cung cấp trong Bộ sưu tập Khung của Java. Lặp lại Một lớp phải thực hiện giao diện Iterable nếu nó muốn có một vòng lặp for- every để lặp lại bộ sưu tập của nó. Tuy nhiên, vòng lặp for-every chỉ có thể được sử dụng để xoay vòng bộ sưu tập theo hướng chuyển tiếp và bạn sẽ không thể sửa đổi các thành phần trong bộ sưu tập này . Nhưng, nếu tất cả những gì bạn muốn là đọc dữ liệu các phần tử, thì nó rất đơn giản và nhờ biểu thức lambda của Java, nó thường là một lớp lót. Ví dụ: iterableElements.forEach (x -> System.out.println(x) );Lặp lại Giao diện này cho phép bạn lặp lại một bộ sưu tập, thu thập và loại bỏ các yếu tố của nó. Mỗi lớp bộ sưu tập cung cấp một phương thức iterator () trả về một iterator để bắt đầu bộ sưu tập. Ưu điểm của giao diện này so với iterable là với giao diện này, bạn có thể thêm, sửa đổi hoặc xóa các thành phần trong bộ sưu tập . Nhưng, việc truy cập các phần tử cần nhiều mã hơn một chút so với lặp lại. Ví dụ: for (Iterator i = c.iterator(); i.hasNext(); ) { Element e = i.next(); //Get the element System.out.println(e); //access or modify the element }Nguồn:
0 hữu ích 0 bình luận chia sẻ answer Hoàng Thông Ðạt · Hoàng Thông Ðạt 17:35 06/02/2019 Iterable đã được giới thiệu để sử dụng cho mỗi vòng lặp trong java public interface Collection<E> extends Iterable<E>Iteratorlà lớp quản lý việc lặp qua một Iterable. Nó duy trì trạng thái của chúng ta trong vòng lặp hiện tại và biết phần tử tiếp theo là gì và làm thế nào để có được nó. 0 hữu ích 1 bình luận chia sẻ |