List Interface Trong Java - VietMX's Blog

Table of Contents

  • 1. List Interface
  • 2. Iterator Interface
  • 3. ListIterator Interface
  • 4. So sánh Iterator và ListIterator

1. List Interface

List Interface trong Java kế thừa Collection và nó cung cấp các phương thức để thao tác với các phần tử trong danh sách.

Interface java.util.List được định nghĩa như sau:

public interface List<E> extends Collection<E>

Các phương thức của List interface

Phương thcMô tả
void add(int index, Object obj)Chèn obj vào trong List đang gọi tại index đã cho. Bất kỳ phần tử nào đã tồn tại trước tại hoặc trên điểm chèn bị bỏ qua. Vì thế, không có phần tử nào bị ghi đè.
boolean addAll(int index, Collection c)Chèn tất cả phần tử của c vào trong List đang gọi tại chỉ mục đã cho. Bất kỳ phần tử nào đã tồn tại trước tại hoặc trên điểm chèn bị bỏ qua. Vì thế, không có phần tử nào bị ghi đè. Trả về true nếu List đang gọi thay đổi và nếu không trả về false.
object get(int index)Trả về đối tượng được lưu giữ tại index đã cho bên trong Collection đang gọi.
int indexOf(Object obj)Trả về index của sự xuất hiện đầu tiên của obj trong List đang gọi. Nếu obj không là một phần tử trong list, -1 được trả về.
int lastIndexOf(Object obj)Trả về index của sự xuất hiện đầu tiên của obj trong List đang gọi. Nếu obj không là một phần tử trong list, -1 được trả về
ListIterator listIterator()Sử dụng để trả về một Iterator mà bắt đầu từ phần tử đầu tiên của list.
ListIterator listIterator(int index)Sử dụng để trả về một Iterator mà phần tử bắt đầu từ chỉ số index chỉ định.
object remove(int index)Gỡ bỏ phần tử tại index từ List đang gọi và trả về phần tử bị xóa đó. List kết quả được compact lại. Đó là, các chỉ mục của dãy phần tử phụ bị lượng giảm đi 1.
object set(int index, Object obj)Gán obj tới vị trí được xác định bởi index bên trong List đang gọi.
List subList(int start, int end)Trả về một list mà bao gồm các phần tử từ start tới end-1 trong List đang gọi. Các phần tử trong list trả về cũng được tham chiếu bởi đối tượng đang gọi.

Ví dụ:

import java.util.ArrayList; import java.util.List; public class ListExample { public static void main(String[] args) { // Create list with no parameter List<String> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { // Add element to list list.add("0" + i); } // Show list through for-each for (String item : list) { System.out.print(item + " "); } } } &#91;/code&#93; <!-- /wp:shortcode --> <!-- wp:paragraph --> <p>Kết quả thực thi chương trình trên:</p> <!-- /wp:paragraph --> <!-- wp:shortcode --> 01 02 03 04 05

2. Iterator Interface

Iterator là một Interface, nó cung cấp một số các phương thức để duyệt qua các phần tử của bất kỳ tập hợp nào. Mỗi interface Collection trong Java đều chứa một phương thức iterator để trả về một thực thể của interface Iterator.

Iterator có khả năng xoá những phần từ tập hợp trong quá trình lặp. Sử dụng for hoặc for-each, bạn không thể xóa phần tử trong khi duyệt các phần tử.

Interface java.util.Iterator được định nghĩa như sau:

public interface Iterator<E>

Ví dụ không thể duyệt và xóa phần tử với for:

import java.util.ArrayList; import java.util.List; public class IteratorExample { public static void main(String[] args) { // Create list with no parameter List<String> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { // Add element to list list.add("0" + i); } // traversing the list in the forward direction for (int i = 0; i < 5; i++) { list.remove(i); } } } &#91;/code&#93; <!-- /wp:shortcode --> <!-- wp:paragraph --> <p>Thực thi chương trình trên, bạn sẽ gặp lỗi&nbsp;<strong>IndexOutOfBoundsException</strong>&nbsp;như sau:</p> <!-- /wp:paragraph --> <!-- wp:shortcode --> Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.remove(ArrayList.java:492) at com.maixuanviet.collection.arraylist.IteratorExample.main(IteratorExample.java:17)

Ví dụ không thể duyệt và xóa phần tử với for-each:

import java.util.ArrayList; import java.util.List; public class IteratorExample { public static void main(String[] args) { // Create list with no parameter List<String> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { // Add element to list list.add("0" + i); } // traversing the list in the forward direction for (String item : list) { list.remove(item); } } } &#91;/code&#93; <!-- /wp:shortcode --> <!-- wp:paragraph --> <p>Thực thi chương trình trên, bạn sẽ gặp lỗi&nbsp;<strong>ConcurrentModificationException</strong>&nbsp;như sau:</p> <!-- /wp:paragraph --> <!-- wp:shortcode --> Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at com.maixuanviet.collection.arraylist.IteratorExample.main(IteratorExample.java:19)

Ví dụ có thể sử dụng for duyệt từ phần tử cuối cùng về phần tử đầu tiên để xóa phần tử:

import java.util.ArrayList; import java.util.List; public class IteratorExample { public static void main(String[] args) { // Create list with no parameter List<String> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { // Add element to list list.add("0" + i); } // traversing the list in the backward direction for (int i = 4; i >= 0; i--) { list.remove(i); } System.out.println("list.isEmpty() = " + list.isEmpty()); } }

Kết quả thực thi chương trình trên:

list.isEmpty() = true

Ví dụ sử dụng Iterator để duyệt và xóa phần tử trong khi duyệt:

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorExample { public static void main(String[] args) { // Create list with no parameter List<String> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { // Add element to list list.add("0" + i); } Iterator<String> iterator = list.iterator(); System.out.println("Using Iterator: Only Traversing the list in the forward direction "); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); iterator.remove(); } System.out.println(); System.out.println("list.isEmpty() = " + list.isEmpty()); } }

Kết quả thực thi chương trình trên:

Using Iterator: Only Traversing the list in the forward direction 01 02 03 04 05 list.isEmpty() = true

Như ví dụ trên, chúng ta có thể xóa phần tử trong khi duyệt qua collection.

3. ListIterator Interface

ListIterator là một interface kế thừa từ lớp Iterator, nó cung cấp phương thức để duyệt các phần tử của List trong java theo cả 2 chiều.

Interface java.util.ListIterator được định nghĩa như sau:

public interface ListIterator<E> extends Iterator<E>

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

Phương thcMô tả
boolean hasNext()Trả về true nếu list interator có tồn tại phần tử kế tiếp phần tử hiện tại.
Object next()Trả về phần tử kế tiếp trong danh sách và vị trí con trỏ tăng lên 1.
boolean hasPrevious()Trả về true nếu list interator có tồn tại phần tử kế sau phần tử hiện tại.
Object previous()Trả về phần tử kế sau trong danh sách và vị trí con trỏ giảm đi 1

Ví dụ:

import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class ListIteratorExample { public static void main(String[] args) { // Create list with no parameter List<String> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { // Add element to list list.add("0" + i); } Iterator<String> iterator = list.iterator(); System.out.println("Using Iterator: Only Traversing the list in the forward direction "); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } System.out.println(); ListIterator<String> itr = list.listIterator(); System.out.println("Using ListIterator: Traversing the list in the forward direction "); while (itr.hasNext()) { System.out.print(itr.next() + " "); } System.out.println(); System.out.println("Using ListIterator: Traversing the list in the reverse direction "); while (itr.hasPrevious()) { System.out.print(itr.previous() + " "); } } }

Kết quả thực thi chương trình trên:

Using Iterator: Only Traversing the list in the forward direction 01 02 03 04 05 Using ListIterator: Traversing the list in the forward direction 01 02 03 04 05 Using ListIterator: Traversing the list in the reverse direction 05 04 03 02 01

4. So sánh Iterator và ListIterator

IteratorListIterator
Iterator đưọc sử dụng để duyệt qua các interface Set và List.ListIterator chỉ đuợc sử dụng để duyệt qua List.
Iterator có thể duyệt qua các phần tử trong tập hợp chỉ theo một huớng.ListIterator có thể duyệt qua List tất cả các huớng (2 huớng).
Không thể thêm, thay thể phần tử khi sử dụng Iterator.ListIterator cài đặt interface Iterator và chứa thêm một số chức năng mới, như thêm mới một phần tử, thay thế phần từ, lấy chỉ mục (index) cho phần từ kế truớc hay sau nó, etc.

Related posts:

Adding Shutdown Hooks for JVM ApplicationsDockerizing a Spring Boot ApplicationJava Program to Implement Splay TreeIterating over Enum Values in JavaHướng dẫn Java Design Pattern – Service LocatorJava Program to Implement LinkedBlockingQueue APIJava Program to Solve Set Cover Problem assuming at max 2 Elements in a SubsetJava Program to Perform Postorder Non-Recursive Traversal of a Given Binary TreeJava Program to Implement Interval TreeJackson – Decide What Fields Get Serialized/DeserializedGuava Collections CookbookJava Program for Topological Sorting in GraphsJava Program to Use the Bellman-Ford Algorithm to Find the Shortest PathA Guide to JUnit 5Java Program to Implement Uniform-Cost SearchJava String to InputStreamJava Program to Implement Bubble SortLogging a Reactive SequenceSpring Boot - Tomcat DeploymentHướng dẫn sử dụng Java GenericsJava – Write a Reader to FileRestTemplate Post Request with JSONRemove All Occurrences of a Specific Value from a ListJava Program to Implement Patricia TrieTổng quan về ngôn ngữ lập trình javaJava Program to Generate All Subsets of a Given Set in the Lexico Graphic OrderMột số ký tự đặc biệt trong JavaJava Program to Perform Left Rotation on a Binary Search TreeCustom Error Pages with Spring MVCString Processing with Apache Commons Lang 3Java Program to Implement Floyd-Warshall AlgorithmSend email with SMTPS (eg. Google GMail)

Từ khóa » Duyệt List Trong Java