- Sản phẩm & Dịch vụSản phẩm & Dịch vụ
- Giải phápGiải pháp
- Bảng giáBảng giá
- Công tyCông ty
- Tài liệuTài liệu
vi
vi
Chuyên mục với 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.
Technical Writer
I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information. @#@ Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.
Thảo luận (0)
Đăng nhập để thảo luận
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.

Một số điểm quan trọng về Java List:
null.replaceAll, sort và spliterator.ClassCastException khi khởi chạy.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 class diagram
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.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.
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]" }}
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]
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]
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.