GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java Core Collection List Interface trong Java

List Interface trong Java

Đăng vào 12/11/2017 . Được đăng bởi GP Coder . 9623 Lượt xem . Toàn màn hình

Nội dung

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

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 thứcMô 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 + " ");
		}
	}
}

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

01 02 03 04 05 

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);
		}
	}
}

Thực thi chương trình trên, bạn sẽ gặp lỗi IndexOutOfBoundsException như sau:

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.gpcoder.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);
		}
	}
}

Thực thi chương trình trên, bạn sẽ gặp lỗi ConcurrentModificationException như sau:

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.gpcoder.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.

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 thứcMô 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 

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.

 

5.0
03
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Collection Được gắn thẻ: Collection

So sánh ArrayList và LinkedList trong Java
So sánh Array và ArrayList trong Java

Có thể bạn muốn xem:

  • Collection trong java (11/11/2017)
  • TreeSet và sử dụng Comparable, Comparator trong java (15/11/2017)
  • Lớp LinkedHashMap trong Java (18/11/2017)
  • Lớp HashMap trong Java (17/11/2017)
  • Queue và PriorityQueue trong Java (22/11/2017)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (97351 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (96987 lượt xem)
  • Giới thiệu Design Patterns (86649 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (85488 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83026 lượt xem)

Nội dung bài viết

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

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link