CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnTổng quan, cú pháp và ví dụ minh họa về Java List
Java

Tổng quan, cú pháp và ví dụ minh họa về Java List

CyStack blog 5 phút để đọc
CyStack blog11/09/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 5 minutes

Java List là một interface có thứ tự, mở rộng từ Collection, cho phép chèn phần tử theo vị trí, truy cập bằng chỉ số và tìm kiếm phần tử trong list.

tổng quan về Java List

Java List

Một số điểm quan trọng về Java List:

  • Java List interface là thành viên của Java Collections Framework.
  • List cho phép thêm các phần tử trùng lặp.
  • List cho phép có các phần tử null.
  • List interface được bổ sung nhiều phương thức mặc định trong Java 8, ví dụ replaceAll, sortspliterator.
  • Chỉ số của List bắt đầu từ 0, giống như mảng.
  • List hỗ trợ Generics và nên được sử dụng khi có thể. Dùng Generics với Litong-quan-ve-java-listst sẽ tránh được lỗi ClassCastException khi khởi chạy.

Biểu đồ lớp Java List

Java List interface mở rộng từ Collection, trong khi Collection tiếp tục mở rộng từ Iterable. Các lớp triển khai List phổ biến gồm ArrayList, LinkedList, Vector, Stack, CopyOnWriteArrayList. Ngoài ra, AbstractList cung cấp một triển khai khung xương để đơn giản hóa việc xây dựng List.

Java List

Java List class diagram

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

Một số phương thức hữu ích của Java List:

  • int size(): trả về số phần tử trong list.
  • boolean isEmpty(): kiểm tra list có rỗng hay không.
  • boolean contains(Object o): trả về true nếu list chứa phần tử chỉ định.
  • Iterator<E> iterator(): trả về một iterator để duyệt các phần tử theo đúng thứ tự.
  • Object[] toArray(): trả về một mảng chứa tất cả phần tử của list.
  • boolean add(E e): thêm phần tử vào cuối list.
  • boolean remove(Object o): xóa lần xuất hiện đầu tiên của phần tử được chỉ định.
  • boolean retainAll(Collection<?> c): chỉ giữ lại các phần tử có trong collection chỉ định.
  • void clear(): xóa toàn bộ phần tử trong list.
  • E get(int index): trả về phần tử tại vị trí chỉ định.
  • E set(int index, E element): thay thế phần tử tại vị trí chỉ định bằng phần tử mới.
  • ListIterator<E> listIterator(): trả về list iterator cho phép duyệt list.
  • List<E> subList(int fromIndex, int toIndex): trả về một view của phần list trong khoảng chỉ định.

Một số phương thức mặc định được thêm vào List trong Java 8:

  • default void replaceAll(UnaryOperator<E> operator): thay thế mỗi phần tử bằng kết quả của operator.
  • default void sort(Comparator<super E> c): sắp xếp list theo thứ tự do Comparator quy định.
  • default Spliterator<E> spliterator(): tạo một Spliterator trên các phần tử trong list.

Chuyển Java Array sang List

Có thể dùng lớp Arrays để chuyển đổi một mảng thành list. Tuy nhiên không thể thực hiện các thay đổi cấu trúc trên list này, nếu làm sẽ ném ra ngoại lệ java.lang.UnsupportedOperationException. Cách tốt nhất là dùng vòng lặp for để tạo list từ mảng. Ví dụ:

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayToList {

	public static void main(String[] args) {

		String[] vowels = {"a","e","i","o","u"};

		List<String> vowelsList = Arrays.asList(vowels);
		System.out.println(vowelsList);

		// sử dụng vòng lặp for để sao chép phần tử từ mảng sang list, an toàn cho việc thay đổi list
		List<String> myList = new ArrayList<>();
		for(String s : vowels){
			myList.add(s);
		}
		System.out.println(myList);
		myList.clear();
	}

}

Bạn có thể chọn bất kỳ phương pháp nào ở trên tùy theo yêu cầu của dự án.

Chuyển Java List sang Array

Ví dụ đơn giản minh họa cách chuyển đổi list sang array:

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListToArray {

	public static void main(String[] args) {

		List<String> letters = new ArrayList<String>();

		// add example
		letters.add("A");
		letters.add("B");
		letters.add("C");

		//convert list to array
		String[] strArray = new String[letters.size()];
		strArray = letters.toArray(strArray);
		System.out.println(Arrays.toString(strArray)); // "[A, B, C]"
	}

}

Sắp xếp Java List

Có 2 cách để sắp xếp list. Có thể dùng lớp Collections cho sắp xếp tự nhiên, hoặc dùng phương thức sort() của List với Comparator tùy chỉnh. Ví dụ:

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class ListSortExample {

	public static void main(String[] args) {

		List<Integer> ints = new ArrayList<>();
		Random random = new Random();
		for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));

		// sắp xếp tự nhiên
		Collections.sort(ints);
		System.out.println("Natural Sorting: "+ints);

		// sắp xếp đảo ngược
		ints.sort((o1,o2) -> {return (o2-o1);});
		System.out.println("Reverse Sorting: "+ints);
	}
}

Dưới đây là một ví dụ kết quả. Vì sử dụng Random để sinh phần tử cho list nên kết quả sẽ khác nhau mỗi lần chạy.

Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]

Các thao tác Java List phổ biến

Một số thao tác phổ biến trên Java List là add, remove, set, clear, size… Ví dụ:

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListExample {

	public static void main(String args[]) {
		List<String> vowels= new ArrayList<String>();

		//add example
		vowels.add("A");
		vowels.add("I");

		//insert example
		vowels.add(1,"E");
		System.out.println(vowels);

		List<String> list = new ArrayList<String>();
		list.add("O");list.add("U");

		//append list
		vowels.addAll(list);
		System.out.println(vowels);

		//clear example
		list.clear();

		//size example
		System.out.println("letters list size = "+vowels.size());

		//set example
		vowels.set(2, "E");
		System.out.println(vowels);

		//subList example
		vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
		list = vowels.subList(0, 2);
		System.out.println("letters = "+vowels+", list = "+list);
		vowels.set(0, "A");
		System.out.println("letters = "+vowels+", list = "+list);
		list.add("U");
		System.out.println("letters = "+vowels+", list = "+list);

	}

}

Kết quả của chương trình ví dụ Java List ở trên là:

[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]

Java List iterator

Ví dụ duyệt list trong Java:

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListIteratorExample {

	public static void main(String[] args) {

		List<Integer> list = new ArrayList<>();
		for(int i=0; i<5; i++) list.add(i);

		Iterator<Integer> iterator = list.iterator();

		//simple iteration
		while(iterator.hasNext()){
			int i = (int) iterator.next();
			System.out.print(i + ", ");
		}
		System.out.println("\\n"+list);

		//modification of list using iterator
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next();
			if(x%2 ==0) iterator.remove();
		}
		System.out.println(list);

		//changing list structure while iterating
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next(); //ConcurrentModificationException
			if(x==1) list.add(10);
		}
	}

}

Kết quả ví dụ duyệt list bằng iterator

0, 1, 2, 3, 4,
[0, 1, 2, 3, 4]
[1, 3]
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.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)

Trên đây là phần tổng hợp nhanh về List trong Java. Hy vọng các ví dụ này sẽ giúp bạn bắt đầu làm việc hiệu quả với List trong lập trình Java.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất