tek4

Iterator Interface trong Java

by - September. 26, 2021
Kiến thức
Học
Công nghệ
<p>Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta sẽ c&ugrave;ng t&igrave;m hiểu về Iterator Interface trong Java c&ugrave;ng với sự trợ gi&uacute;p của v&iacute; dụ dẫn chứng.</p> <p>Iterator Interface của Collections trong Java cho ph&eacute;p ch&uacute;ng ta truy cập c&aacute;c phần tử của c&aacute;c tập hợp v&agrave; được sử dụng để duyệt qua c&aacute;c phần tử trong tập hợp như Map, List hoặc Set. N&oacute; gi&uacute;p dễ d&agrave;ng truy xuất c&aacute;c phần tử của một tập hợp v&agrave; thực hiện c&aacute;c thao t&aacute;c tr&ecirc;n mỗi phần tử. N&oacute; c&oacute; một Interface con l&agrave; ListIterator. Ngo&agrave;i ra, Interface n&agrave;y được sử dụng thay thế cho Enumerations trong Collection Framework trong Java.</p> <p>Iterator c&oacute; thể được &aacute;p dụng cho bất kỳ đối tượng của bất kỳ tập hợp n&agrave;o. Ch&uacute;ng ta chỉ c&oacute; thể duyệt qua c&aacute;c phần tử theo hướng về ph&iacute;a trước bằng c&aacute;ch sử dụng Interface n&agrave;y. Ngo&agrave;i ra, việc sử dụng ListIterator Interface, kế thừa Iterator, c&oacute; thể duyệt phần tử theo cả hai hướng. Cả hai thao t&aacute;c đọc v&agrave; loại bỏ phần tử đều c&oacute; thể được thực hiện bởi Iterator Interface.</p> <p>Tất cả c&aacute;c tập hợp trong Java bao gồm một phương thức iterator(). Phương thức n&agrave;y trả về một đối tượng của v&ograve;ng lặp được sử dụng để lặp qua c&aacute;c phần tử của tập hợp.</p> <h2>C&aacute;c phương thức của Iterator</h2> <p>Iterator Interface cung cấp 4 phương thức c&oacute; thể được sử dụng để thực hiện c&aacute;c hoạt động kh&aacute;c nhau tr&ecirc;n c&aacute;c phần tử của tập hợp.</p> <ul> <li>Phương thức hasNext(): Trả về true nếu tồn tại một phần tử trong tập hợp.</li> <li>Phương thức next(): Trả về phần tử tiếp theo của tập hợp.</li> <li>Phương thức remove(): Loại bỏ phần tử cuối c&ugrave;ng được trả về bởi next().</li> <li>Phương thức forEachRemaining(): Thực hiện h&agrave;nh động được chỉ định cho từng phần tử c&ograve;n lại của tập hợp.</li> </ul> <p>V&iacute; dụ:</p> <pre class="language-java"><code>import java.util.ArrayList; import java.util.Iterator; class Main { public static void main(String[] args) { ArrayList&lt;Integer&gt; so_nguyen = new ArrayList&lt;&gt;(); so_nguyen.add(34); so_nguyen.add(25); so_nguyen.add(58); System.out.println(so_nguyen); Iterator&lt;Integer&gt; phan_tu = so_nguyen.iterator(); int i = phan_tu.next(); System.out.println(i); phan_tu.remove(); while(phan_tu.hasNext()) { phan_tu.forEachRemaining((gia_tri) -&gt; System.out.print(gia_tri + " ")); } } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>[34, 25, 58] 34 25 58</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ta đ&atilde; sử dụng c&acirc;u lệnh:</p> <pre class="language-java"><code>phan_tu.forEachRemaining((gia_tri) -&gt; System.out.print(gia_tri + " "));</code></pre> <p>Ở đ&acirc;y, ch&uacute;ng ta đ&atilde; truyền biểu thức lambda l&agrave;m đối số của phương thức forEachRemaining(). Phương thức n&agrave;y sẽ in tất cả c&aacute;c phần tử c&ograve;n lại của danh s&aacute;ch mảng.</p> <h2>Ưu điểm của Iterator Interface</h2> <ul> <li>N&oacute; kh&ocirc;ng phải l&agrave; một Interface kế thừa v&agrave; c&oacute; thể duyệt qua c&aacute;c phần tử của c&aacute;c tập hợp như ArrayList, HashMap, TreeSet, HashSet, v&agrave; c&aacute;c tập hợp kh&aacute;c.</li> <li>N&oacute; c&oacute; thể được sử dụng cho bất kỳ tập hợp n&agrave;o.</li> <li>C&aacute;c thao t&aacute;c đọc v&agrave; x&oacute;a được hỗ trợ trong Interface n&agrave;y.</li> <li>T&ecirc;n phương thức của Iterator đơn giản v&agrave; dễ sử dụng.</li> </ul> <h2>Nhược điểm</h2> <ul> <li>N&oacute; kh&ocirc;ng hỗ trợ c&aacute;c thao t&aacute;c tạo v&agrave; cập nhật trong c&aacute;c thao t&aacute;c (Tạo, Đọc, Cập nhật, X&oacute;a).</li> <li>N&oacute; chỉ hỗ trợ duyệt phần tử đơn hướng, tức l&agrave; chỉ c&oacute; duyệt theo hướng về ph&iacute;a trước.</li> <li>N&oacute; kh&ocirc;ng hỗ trợ qu&aacute; tr&igrave;nh duyệt phần tử tốt hơn tr&ecirc;n một khối lượng lớn dữ liệu so với Spliterator.</li> <li>N&oacute; chỉ hỗ trợ việc lặp tuần tự, kh&ocirc;ng hỗ trợ việc duyệt qua c&aacute;c phần tử song song.</li> </ul> <h2>Điểm kh&aacute;c biệt giữa Iterator v&agrave; Enumeration</h2> <table style="width: 100%;"> <tbody> <tr> <td style="text-align: center; width: 61.2022%;">Iterator</td> <td style="text-align: center; width: 38.0328%;">Enumeration</td> </tr> <tr> <td style="width: 61.2022%;">Được giới thiệu trong JDK 1.2.</td> <td style="width: 38.0328%;">Được giới thiệu trong JDK 1.0.</td> </tr> <tr> <td style="width: 61.2022%;">C&oacute; thể sử dụng với bất kỳ tập hợp n&agrave;o.</td> <td style="width: 38.0328%;">Chỉ c&oacute; thể sử dụng với một v&agrave;i tập hợp nhất định.</td> </tr> <tr> <td style="width: 61.2022%;">Hỗ trợ c&aacute;c thao t&aacute;c đọc v&agrave; x&oacute;a phần tử.</td> <td style="width: 38.0328%;">Chỉ hỗ trợ c&aacute;c thao t&aacute;c đọc.</td> </tr> <tr> <td style="width: 61.2022%;">T&ecirc;n c&aacute;c phương thức đơn giản hơn.</td> <td style="width: 38.0328%;">T&ecirc;n c&aacute;c phương thức phức tạp hơn.</td> </tr> <tr> <td style="width: 61.2022%;">C&oacute; thể thực hiện c&aacute;c thay đổi trong qu&aacute; tr&igrave;nh duyệt qua c&aacute;c phần tử.</td> <td style="width: 38.0328%;">Kh&ocirc;ng thể thực hiện c&aacute;c thay đổi trong qu&aacute; tr&igrave;nh duyệt qua c&aacute;c phần tử.</td> </tr> <tr> <td style="width: 61.2022%;">Kh&ocirc;ng phải l&agrave; một Interface kế thừa. N&oacute; c&oacute; thể được sử dụng để duyệt qua c&aacute;c tập hợp như ArrayList,&nbsp;HashMap,&nbsp;TreeSet,&nbsp;Vector v&agrave; c&aacute;c tập hợp kh&aacute;c.</td> <td style="width: 38.0328%;">L&agrave; một Interface kế thừa. N&oacute; chỉ c&oacute; thể duyệt qua tập hợp Vector v&agrave;&nbsp;Hashtable.</td> </tr> </tbody> </table> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về Iterator Interface trong Java. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>