Tất tần tật về List trong Java

Ngày đăng: 16/04/2020   -    Cập nhật: 14/04/2021
Trong bài viết này mình sẽ hướng dẫn bạn bắt đầu tìm hiểu về Collection trong Java, đầu tiên là tìm hiểu về List trong Java.


Tìm hiểu về List trong Java

Tìm hiểu về List trong Java


Nếu bạn mới bắt đầu học Java thì mình nghĩ là bạn nên học theo tuần tự. Bài viết TỰ HỌC JAVA này sẽ giúp bạn học đầy đủ kiến thức trước khi bắt đầu bài học này.


Bài học này bao gồm 6 chủ đề chính:



  • Java Collections Framework
  • Java Collection Interface
  • Java List Interface
  • Java ArrayList
  • Java Vector
  • Java Stack


Chúng ta sẽ đi theo từng bước để chắc chắn là bạn không bỏ sót kiến thức nào để có thể tiếp tục hiểu các kiến thức sẽ được giới thiệu / giải thích trong bài viết List trong Java này.


Từng phần, từng phần sẽ bổ sung cho nhau để đảm bảo bạn hiểu rõ. Vì thế đừng vội vàng quá.


Nào, hãy bắt đầu với phần đầu tiên.



PHẦN 1: JAVA COLLECTIONS FRAMEWORK LÀ GÌ?



Nền tảng Java (Java platform) có bao gồm một collections framework. Frameowork này cung cấp một tập hợp các interface và các class để thực hiện các cấu trúc dữ liệu và thuật toán khác nhau.


Ví dụ, class LinkedList của collections frameowrk cung cấp việc triển khai cấu trúc dữ liệu doubly-linked list.



1.1. INTERFACE CỦA COLLECTONS FRAMEWORK



Java Collections Framework cung cấp các interface khác nhau.


Các interface này bao gồm một số phương thức để thực hiện các hoạt động khác nhau.



Sơ đồ Java Collections Framework

Sơ đồ Java Collections Framework


Chúng ta sẽ tìm hiểu chi tiết về các interface này, các subinteface của chúng và triển khai trong các class khác nhau trong các phần tiếp theo.


Bây giờ, chúng ta hãy tìm hiểu ngắn gọn về các interface thường được sử dụng.



1.2. TÌM HIỂU CƠ BẢN VỀ JAVA COLLECTIONS INTERFACE?



Collection interface là root interface (interface gốc) của hệ thống phân cấp collections framework.


Java không cung cấp các triển khai trực tiếp của Collection interface nhưng cung cấp các triển khai của các subinterface của nó như List, SetQueue.



COLLECTIONS FRAMEWORK KHÁC VỚI COLLECTION INTERFACE Ở CHỖ NÀO?



Mọi người thường bị nhầm lẫn giữa Collection Framework và Collection Interface.


Collection Interface là root interface của Framework.


Và Framework này cũng bao gồm các Interface khác như: MapIterator.


Các interface này cũng có thể có subinterface.



1.3. SUBINTERFACES CỦA COLLECTION INTERFACE LÀ GÌ?



Như đã đề cập trước đó, Collection Interface bao gồm các subinterface được triển khai bởi các Java class.


Tất cả các phương thức của Collection Interface cũng có mặt trong các subinterface của nó.


Dưới đây là các subinterface của Collection Interface:



LIST INTEFACE TRONG JAVA



List interface trong Java là một tập hợp theo thứ tự cho phép chúng ta thêm và xóa các phần tử như một mảng.


SET INTERFACE TRONG JAVA



Set Interface trong Java cho phép chúng ta lưu trữ các phần tử trong các tập hợp khác nhau tương tự như tập hợp trong toán học.


Set không thể có các phần tử trùng lặp.



QUEUE INTERFACE TRONG JAVA



Queue Interface trong Java được sử dụng khi chúng ta muốn lưu trữ và truy cập các phần tử theo cách First In, First Out (Vào trước thì Ra trước).


1.4. JAVA MAP INTERFACE LÀ GÌ?



Trong Java, Map Interface cho phép các phần tử được lưu trữ trong các cặp key / value.


Key là tên duy nhất có thể được sử dụng để truy cập một phần tử cụ thể trong map Và, mỗi key có một giá trị liên quan đến nó.



1.5. JAVA ITERATOR INTERFACE LÀ GÌ?



Trong Java, Iterator Interface cung cấp các phương thức có thể được sử dụng để truy cập các phần tử của các tập hợp.


1.6. TẠI SAO CHÚNG TA LẠI SỬ DỤNG COLLECTIONS FRAMEOWKR TRONG JAVA?



Java Collections Framework cung cấp các cấu trúc dữ liệu và thuật toán khác nhau có thể được sử dụng trực tiếp. Điều này có hai ưu điểm chính:


  • Chúng ta không phải viết code để thực hiện các cấu trúc dữ liệu và thuật toán theo cách thủ công.
  • Code của chúng ta sẽ hiệu quả hơn nhiều vì Collections Framework được tối ưu hóa cao.


Hơn nữa, Collections Framework cho phép chúng ta sử dụng cấu trúc dữ liệu cụ thể cho một loại dữ liệu cụ thể để tối ưu hóa. Đây là vài ví dụ:


  • Nếu chúng ta muốn dữ liệu của mình là duy nhất, thì chúng ta có thể sử dụng Set Interface.
  • Để lưu trữ dữ liệu theo cặp key / value, chúng ta có thể sử dụng Map Inteface.
  • Class ArrayList làm cho các mảng có thể thay đổi kích thước.


1.7. VÍ DỤ VỀ SỬ DỤNG ArrayLisst CỦA COLLECTIONS



Trước khi chúng ta kết thúc phần này, hãy lấy một ví dụ về class ArrayList của Collections Framework.


Class ArrayList cho phép chúng ta tạo các mảng có thể thay đổi kích thước. Class này là khai triển Interface List (là subinteface của Collections interface).




// Collections framework được định nghĩa bên trong java.util package
import java.util.ArrayList;

class Main {
    public static void main(String[] args){
        ArrayList<StringdongVat = new ArrayList<>();
        // Thêm phần tử
        dongVat.add("Chó");
        dongVat.add("Mèo");
        dongVat.add("Gà");

        System.out.println("ArrayList: " + dongVat);
    }
}
 


Kết quả khi chạy chương trình:



ArrayList: [Chó, Mèo, Gà]
 


Như bạn thấy, chúng ta tạo đối tượng dongVat từ class ArrayList.


Bây giờ dongVat là một mảng có thể chứa các phần tử là String.


Tuy nhiên, hãy nhìn kỹ, chúng ta không khai báo số lượng phần tử mà dongVat có thể chứa.


Nhưng khi chúng ta thêm phần tử vào mà không hề bị lỗi như mảng Java thông thường.


Ok, bây giờ bạn đã hiểu sơ lược về Java Collections Framework và tại sao chúng ta lại sử dụng nó.


Hãy cùng sang phần tiếp theo.



PHẦN 2: JAVA COLLECTION INTERFACE LÀ GÌ?



Trong phần này, chúng ta sẽ tìm hiểu thêm một chút về Java Collections Interface và các subinterface của nó.


Trước tiên hãy nhìn vào ảnh minh họa dưới đây:



 
Sơ đồ Java Collections Interfaces
Sơ đồ Java Collections Interfaces


Collection Inteface là root inteface của Java Collections Framework.


Không có triển khai trực tiếp của interface này. Tuy nhiên, nó được triển khai thông qua các subinterface của nó như List, Set và Queue.


Ví dụ, class ArrayList triển khai List Interface là subinterface của Collections Interface.



2.1. SUBINTERFACE CỦA COLLECTION



Như đã đề cập ở trên, Collection Interface bao gồm các subinterface được triển khai bởi các class khác nhau trong Java.


LIST INTEFACE



List interface là một tập hợp có thứ tự cho phép chúng ta thêm và xóa các phần tử như một mảng.


SET INRERFACE


Set interface cho phép chúng ta lưu trữ các phần tử trong các tập hợp khác nhau tương tự như tập hợp trong toán học.


Set không thể có các phần tử trùng lặp.


QUEUE INTERFACE



Queue interface được sử dụng khi chúng ta muốn lưu trữ và truy cập các phần tử theo cách Nhập trước, Xuất trước.


2.2. CÁC PHƯƠNG THỨC CỦA COLLECTION



Collection Interface có chứa nhiều phương thức khác nhau có thể được sử dụng để thực hiện các hoạt động khác nhau trên các đối tượng.


Các phương thức này có sẵn trong tất cả các subinterface của nó.



  • add() - chèn phần tử đã chỉ định vào tập hợp
  • size() - trả về kích thước của tập hợp
  • remove() - xóa phần tử đã chỉ định khỏi tập hợp
  • iterator() - trả về một iterator để truy cập các phần tử của tập hợp
  • addAll() - thêm tất cả các phần tử của tập hợp đã chỉ định vào tập hợp
  • removeAll() - xóa tất cả các phần tử của tập hợp đã chỉ định khỏi tập hợp
  • clear() - xóa tất cả các phần tử của tập hợp.


Tiếp theo, chúng ta sẽ bắt đầu đi vào chủ để chính trong bài viết này.


PHẦN 3: LIST TRONG JAVA



Trong phần này, chúng ta sẽ tìm hiểu về List interface trong Java và các phương thức của nó.


Trong Java, List interface là một tập hợp được sắp xếp cho phép chúng ta lưu trữ và truy cập các phần tử theo tuần tự.


List interface mở rộng (kế thừa) Collection interface.



3.1. CÁC CLASS TRIỂN KHAI LIST TRONG JAVA



List là một interface, nên chúng ta không thể tạo các đối tượng từ nó.


Để sử dụng các tính năng của List interface, chúng ta có thể sử dụng các class sau:



  • ArrayList
  • LinkedList
  • Vector
  • Stack

Các class triển khai List interface

Các class triển khai List interface


Các class này được định nghĩa trong Collections Framework và triển khai List interface.


3.2. LÀM THẾ NÀO ĐỂ SỬ DỤNG LIST TRONG JAVA?



Trong Java, chúng ta phải import package là java.util.List để sử dụng được List.



// ArrayList triển khai List
List<Stringlist1 = new ArrayList<>();

// LinkedList triển khai List
List<Stringlist2 = new LinkedList<>();
 



Ở đây, chúng ta đã tạo các đối tượng list1list2 của class ArrayListLinkedList.


Các đối tượng này có thể sử dụng các tính năng của List interface.



3.3. CÁC PHƯƠNG THỨC CỦA LIST



List interface bao gồm tất cả các phương thức của Collection interface. Bởi vì Collection là một Super interface của List.


Một số phương thức thường được sử dụng của Collection interface cũng có sẵn trong List interface là:



  • add() - thêm một phần tử vào list
  • addAll() - thêm tất cả các phần tử của list này vào list khác
  • get() - giúp truy cập ngẫu nhiên các phần tử từ list
  • tterator() - trả về đối tượng iterator có thể được sử dụng để truy cập tuần tự các phần tử của list
  • set() - thay đổi các phần tử của list
  • remove() - xóa một phần tử khỏi list
  • removeAll() - xóa tất cả các phần tử khỏi list
  • clear() - xóa tất cả các phần tử khỏi list (hiệu quả hơn removeAll())
  • size() - trả về độ dài của list
  • toArray() - chuyển đổi một list thành một array
  • contains() - trả về true nếu list chứa phần tử được chỉ định


3.4. VÍ DỤ TRIỂN KHAI CỦA LIST INTERFACE TRONG JAVA



Như đã nói ở trên, List interface có các class ArrayList, LinkedList, Vector và Stack.


Chúng ta sẽ thử xem ví dụ triển khai List interface với ArrayList và LinkedList trước.



VÍ DỤ TRIỂN KHAI CLASS ARRAYLIST TRONG JAVA



Hãy cùng xem ví dụ bên dưới đây để hiểu cách sử dụng ArrayList:



// import package cần thiết
import java.util.List;
import java.util.ArrayList;

class Main {

    public static void main(String[] args) {
        // Tạo một list numbers sử dụng class ArrayList
        // numbers chứa Integer
        List<Integernumbers = new ArrayList<>();

        // Thêm phần tử vào trong list
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("List: " + numbers);

        // Truy cập phần tử từ list
        int number = numbers.get(2);
        System.out.println("Truy cập phần tử: " + number);

        // Loại bỏ phần tử khỏi list
        int removedNumber = numbers.remove(1);
        System.out.println("Loại bỏ phần tử: " + removedNumber);
    }
}
 


Kết quả khi chạy chương trình trên:



List: [1, 2, 3]
Truy cập phần tử: 3
Loại bỏ phần tử: 2
 


VÍ DỤ TRIỂN KHAI CLASS LINKEDLIST TRONG JAVA



Chúng ta có ví dụ đơn giản về LinkedList trong Java như sau:



// import package cần thiết
import java.util.List;
import java.util.LinkedList;

class Main {

    public static void main(String[] args) {
        // Tạo list numbers sử dụng LinkedList
        List<Integernumbers = new LinkedList<>();

        // Thêm phần tử vào list
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("List: " + numbers);

        // Truy cập phần tử từ list
        int number = numbers.get(2);
        System.out.println("Truy cập phần tử: " + number);

        // Sử dụng phương thức indexOf()
        int index = numbers.indexOf(2);
        System.out.println("Vị trí của phần tử 2 là: " + index);

        // Loại bỏ phần tử khỏi list
        int removedNumber = numbers.remove(1);
        System.out.println("Loại bỏ phần tử: " + removedNumber);
    }
}
 


Kết quả khi chạy chương trình trên là:



List: [1, 2, 3]
Truy cập phần tử: 3
Vị trí của phần tử 2 là: 1
Loại bỏ phần tử: 2
 


3.5. TRONG JAVA LIST KHÁC SET Ở ĐIỂM NÀO?



Cả List interface và Set interface đều kế thừa Collections Framework. Tuy nhiên, có một số khác biệt giữa chúng.

  • List có thể chứa các phần tử trùng lặp. Tuy nhiên, Set là không thể chứa các phần tử trùng lặp.

  • Các phần tử trong List được lưu trữ theo thứ tự. Tuy nhiên, các phần tử trong Set được lưu trữ trong các nhóm như tập hợp trong toán học.


Bây giờ chúng ta đã biết List là gì, chúng ta sẽ thấy các triển khai của nó trong các lớp ArrayList và LinkedList một cách chi tiết trong các phần tiếp theo.


PHẦN 4: ARRAYLIST TRONG JAVA



Trong phần này, chúng ta sẽ tìm hiểu về class ArrayList trong Java. Chúng ta sẽ tìm hiểu về cách hoạt động và các phương thức ArrayList khác nhau với sự trợ giúp của các ví dụ.


Class ArrayList là một triển khai của List interface cho phép chúng ta tạo các mảng có thể thay đổi kích thước.



Mối quan hệ giữa ArrayList, List và Collection trong Java

Mối quan hệ giữa ArrayList, List và Collection trong Java


4.1. ARRAYLIST KHÁC ARRAY NHƯ THẾ NÀO?



Trong Java, chúng ta cần khai báo kích thước của một mảng trước khi có thể sử dụng nó.


Khi kích thước của một mảng được khai báo, bạn khó có thể thay đổi nó.


Để xử lý vấn đề này, chúng ta có thể sử dụng class ArrayList.


Class ArrayList có sẵn trong java.util package cho phép chúng ta tạo các mảng có thể thay đổi kích thước.


Không giống như mảng thông thường, Array list (đối tượng của lớp ArrayList) có thể tự động điều chỉnh kích thước của nó khi chúng ta thêm hoặc xóa các phần tử khỏi nó.


Do đó, Array list còn được gọi là Dynamic array (Mảng động).



4.2. CÁCH TẠO RA MỘT ARRAYLIST TRONG JAVA



Đây là cách chúng ta có thể tạo Array list trong Java:



ArrayList<TypearrayListnew ArrayList<>();
 


Ở đây, Type chỉ định kiểu dữ liệu mà Array list có thể chứa.



// Tạo một ArrayList chứa Integer
ArrayList<IntegerarrayList = new ArrayList<>();

//  Tạo một ArrayList chứa String
ArrayList<StringarrayList = new ArrayList<>();
 


Trong chương trình trên, chúng ta đã sử dụng IntegerString.


Ở đây, Integer là wrapper class (class bao bọc) tương tứng của kiểu int.


Một wrapper class là một lớp bao bọc một kiểu dữ liệu nguyên thủy.


Ví dụ, class Integer bao bọc kiểu int, class Float bao bọc kiểu float, v.v.



Lưu ý!

Chúng ta không thể tạo ArrayList với các kiểu dữ liệu nguyên thủy như int, float, char, v.v. Thay vào đó, chúng ta phải sử dụng wrapper class tương ứng của chúng.



Trong trường hợp của String, String là một class và không wrapper class. Do đó, chúng ta sử dụng chính nó.


Chúng tôi cũng có thể tạo Array list bằng cách sử dụng List interface. Bởi vì class ArrayList là một triển khai của List interface.




List<Stringlist = new ArrayList<>();
 


4.3. CÁC PHƯƠNG THỨC CỦA ARRAYLIST TRONG JAVA



ArrayList có cung cấp các phương thức khác nhau cho phép chúng ta thực hiện thao tác với các Array list.


THÊM PHẦN TỬ VÀO MỘT ARRAYLIST TRONG JAVA



Cách #1: Sử dụng phương thức add()


Để thêm một phần tử vào một ArrayList, chúng ta sử dụng phương thức add(). Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args){
        ArrayList<StringdongVat = new ArrayList<>();

        // Thêm các phần tử vào ArrayList bằng add()
        dongVat.add("Chó");
        dongVat.add("Mèo");
        dongVat.add("Gà");
        System.out.println("ArrayList: " + dongVat);
    }
}
 


Kết quả khi chạy chương trình là:



ArrayList: [Chó, Mèo, Gà]
 



Cách #2: Sử dụng chỉ số index.



Chúng ta cũng có thể thêm các phần tử vào một Array list bằng cách sử dụng chỉ số index. Ví dụ:



import java.util.ArrayList;

class Main {
    public static void main(String[] args){
        ArrayList<StringdongVat = new ArrayList<>();

        // Thêm phần tử sử dụng index
        dongVat.add(0,"Chó");
        dongVat.add(1,"Mèo");
        dongVat.add(2,"Gà");
        System.out.println("ArrayList: " + dongVat);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList: [Chó, Mèo, Gà]
 



Cách #3: Thêm phần tử của Array list này vào một Array list khác


Để thêm tất cả các phần tử của Array list này vào Array list mới, chúng ta sử dụng phương thức addAll(). Ví dụ:



import java.util.ArrayList;

class Main {
public static void main(String[] args){
        ArrayList<StringthuNuoi = new ArrayList<>();
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("Thú nuôi: " + thuNuoi);

        ArrayList<StringdongVat = new ArrayList<>();
        dongVat.add("Cá xấu");

        // Thêm tất cả phần tử của thuNuoi vào dongVat
        dongVat.addAll(thuNuoi);
        System.out.println("Động vật: " + dongVat);
    }
}
 


Kết quả khi chạy chương trình:



Thú nuôi: [Chó, Mèo, Gà]
Động vật: [Cá xấu, Chó, Mèo, Gà]
 


KHỞI TẠO MỘT ARRAYLIST SỬ DỤNG ASLIST()



Không giống như mảng, chúng ta không thể khởi tạo trực tiếp Array list.


Tuy nhiên, chúng ta có thể sử dụng phương thức asList() của class Arrays để đạt được kết quả tương tự.


Để sử dụng phương thức asList(), trước tiên chúng ta phải import package java.util.Arrays.


Hãy xem ví dụ sau:




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

class Main {
    public static void main(String[] args) {
        // Tạo một Array list
        ArrayList<StringthuNuoi = new ArrayList<>(Arrays.asList("Chó""Mèo""Gà"));
        System.out.println("Thú nuôi: " + thuNuoi);

        // Truy cập phần tử của Array list
        String phanTuMang = thuNuoi.get(1);
        System.out.println("Truy cập phần tử: " + phanTuMang);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Thú nuôi: [Chó, Mèo, Gà]
Truy cập phần tử: Mèo
 


Trong ví dụ trên, hãy để ý biểu thức:



new ArrayList<>(Arrays.asList("Chó""Mèo""Gà"));
 



Ở đây, trước tiên chúng ta đã tạo ra một mảng gồm 3 phần tử: "Chó", "Mèo", "Gà".


Sau đó, phương thức asList() được sử dụng để chuyển đổi mảng thành một Array list.


Để tìm hiểu thêm về các cách khác nhau để khởi tạo ArrayList, hãy xem thêm trên Stack Overflow.



TRUY CẬP PHẦN TỬ ARRAYLIST TRONG JAVA



Cách #1: Sử dụng phương thức get()



Để truy cập ngẫu nhiên các phần tử của ArrayList, chúng ta sử dụng phương thức get().


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList<StringthuNuoi = new ArrayList<>();

        // Thêm phần tử vào Array list
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("Thú nuôi: " + thuNuoi);

        // Get the element from the array list
        String thu = thuNuoi.get(0);
        System.out.print("Truy cập phần tử thứ 0: " + thu);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Thú nuôi: [Chó, Mèo, Gà]
Truy cập phần tử thứ 0: Chó
 



Cách #2: Sử dụng phương thức iterator()


Để truy cập tuần tự các phần tử của Array list, chúng ta sử dụng phương thức iterator().


Trước tiên, chúng ta phải import package java.util.Iterator để sử dụng phương thức iterator().


Ví dụ:




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

class Main {
    public static void main(String[] args){
        ArrayList<StringthuNuoi = new ArrayList<>();

        // Add elements in the array list
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        thuNuoi.add("Lợn");

        // Tạo một đối tượng của Iterator
        Iterator<Stringiterate = thuNuoi.iterator();
        System.out.print("Thú nuôi: ");

        // Use methods of Iterator to access elements
        while(iterate.hasNext()){
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Thú nuôi: Chó, Mèo, Gà, Lợn
 


Ở đây:


  • hasNext() trả về true nếu có phần tử tiếp theo trong Array list.
  • next() trả về phần tử tiếp theo trongArray list.


THAY ĐỔI PHẦN TỬ TRONG ARRAYLIST



Để thay đổi các phần tử của Array list, chúng ta có thể sử dụng phương thức set().


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList<StringthuNuoi = new ArrayList<>();
        
        // Thêm phần tử vào Array list
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList: " + thuNuoi);

        // Change the element of the array list
        thuNuoi.set(2"Lợn");
        System.out.println("ArrayList đã thay đổi: " + thuNuoi);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList: [Chó, Mèo, Gà]
ArrayList đã thay đổi: [Chó, Mèo, Lợn]
 


LOẠI BỎ PHẦN TỬ KHỎI ARRAYLIST



Cách #1: Sử dụng phương thức remove()


Để loại bỏ một phần tử khỏi Array list, chúng ta có thể sử dụng phương thức remove().


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList<StringthuNuoi = new ArrayList<>();

        // Thêm các phần tử vào Array list
        thuNuoi.add("chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList ban đầu: " + thuNuoi);

        // Loại bỏ phần tử có index bằng 2
        String thu = thuNuoi.remove(2);
        System.out.println("ArrayList lúc sau: " + thuNuoi);
        Systemout.println("Phần tử đã loại bỏ: " + thu);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList ban đầu: [Chó, Mèo, Gà]
ArrayList lúc sau: [Chó, Mèo]
Phần tử đã loại bỏ: Gà
 


Cách #2: Sử dụng phương thức removeAll()


Để loại bỏ tất cả các phần tử khỏi Array list, chúng ta có thể sử dụng phương thức removeAll().


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList<StringthuNuoi = new ArrayList<>();

        // Thêm các phần tử vào Array list
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList ban đầu: " + thuNuoi);

        // Loại bỏ tất cả phần tử khỏi Array list
        animals.removeAll(thuNuoi);
        System.out.println("ArrayList lúc sau: " + thuNuoi);
    }
}
 


Khi chạy chương trình, kết quả bạn nhận được là:



ArrayList ban đầu: [Chó, Mèo, Gà]
ArrayList lúc sau: []
 


Cách #3: Sử dụng phương thức clear()


Chúng ta cũng có thể sử dụng phương thức clear() để xóa tất cả các phần tử khỏi Array list.


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList<StringthuNuoi = new ArrayList<>();

        // Thêm các phần tử vào Array list
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList ban đầu: " + thuNuoi);

        // Loại bỏ tất cả phần tử khỏi Array list
        animals.clear();
        System.out.println("ArrayList lúc sau: " + thuNuoi);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList ban đầu: [Chó, Mèo, Gà]
ArrayList lúc sau: []
 


LẶP QUA MỘT ARRAYLIST TRONG JAVA



Cách #1: Sử dụng vòng lặp for


Hãy xem ví dụ sau để hiểu cách sử dụng vòng lặp for để truy cập vào phần tử của Array list.



import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        // Tạo một array list
        ArrayList<StringthuNuoi = new ArrayList<>();
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList: " + thuNuoi);

        // Sử dụng vòng lặp for
        System.out.println("Truy cập phần tử ArrayList: ");

        for(int i = 0; i < thuNuoi.size(); i++) {
            System.out.print(thuNuoi.get(i));
            System.out.print(", ");
        }
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList: [Chó, Mèo, Gà]
Truy cập phần tử ArrayList:
Chó, Mèo, Gà,
 


Cách #2: Sử dụng vòng lặp forEach


Hãy xem ví dụ bên dưới đây để hiểu cách sử dụng vòng lặp forEach để truy cập các phần tử trong Array list.



import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        // Tạo một array list
        ArrayList<StringthuNuoi = new ArrayList<>();
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList: " + thuNuoi);

        // Sử dụng vòng lặp forEach
        System.out.println("Truy cập phần tử ArrayList: ");

        for (String thu : thuNuoi) {
            System.out.print(thu);
            System.out.print(", ");
        }
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList: [Chó, Mèo, Gà]
Truy cập phần tử ArrayList:
Chó, Mèo, Gà,
 


Trong cả hai ví dụ trên, chúng ta đã truy cập các phần tử riêng lẻ của một Array list bằng cách sử dụng các vòng lặp đã được học.


LẤY ĐỘ DÀI CỦA ARRAYLIST



Để lấy được độ dài của Array list, chúng ta sử dụng phương thức size().



import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        // Tạo một array list
        ArrayList<StringthuNuoi = new ArrayList<>();
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("ArrayList: " + thuNuoi);

        // Lấy độ dài của Array list
        System.out.println("Độ dài ArrayList: " + thuNuoi.size());
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList: [Chó, Mèo, Gà]
Độ dài ArrayList: 3
 


SẮP XẾP PHẦN TỬ TRONG ARRYLIST



Để sắp xếp các phần tử của ArrayList, chúng ta sử dụng phương thức sort() của class Collections.


Để sử dụng được phương thức sort(), trước tiên chúng ta phải import package java.util.Collections.


Theo mặc định, phương thức sort sẽ sắp xếp theo thứ tự bảng chữ cái hoặc số theo thứ tự tăng dần.



Ví dụ:



import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        // Tạo một array list
        ArrayList<StringthuNuoi = new ArrayList<>();
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        thuNuoi.add("Lợn");

        System.out.println("ArrayList chưa sắp xếp: " + thuNuoi);

        // Sắp xếp Array list
        Collections.sort(thuNuoi);
        System.out.println("ArrayList đã sắp xếp: " + thuNuoi);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:


ArrayList chưa sắp xếp: [Chó, Mèo, Lợn, Gà]
ArrayList đã sắp xếp: [Chó, Gà, Lợn, Mèo]
 


CÁCH CHUYỂN ARRAYLIST THÀNH ARRAY TRONG JAVA


Trong Java, chúng ta có thể chuyển ArrayList thành Array thông thường bằng phương thức toArray().


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        // Tạo một array list
        ArrayList<StringthuNuoi = new ArrayList<>();
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        thuNuoi.add("Lợn");

        System.out.println("ArrayList chưa sắp xếp: " + thuNuoi);

        // Tạo một mảng chứa String
        String[] arr = new String[thuNuoi.size()];

        thuNuoi.toArray(arr);
        System.out.print("Array: ");
        for (String thu : arr) {
            System.out.print(thu + ", ");
        }
    }
}
 


Khi chạy chương trình, kết quả nhận được là:


ArrayList: [Chó, Mèo, Gà, Lợn]
Array: Chó, Mèo, Gà, Lợn,
 



Ở trên chúng ta đã biết chuyển ArrayList thành Array. Vậy thì chuyển Array thành ArrayList có được không?


Câu trả lời là hoàn toàn có thể.


CÁCH CHUYỂN ARRAY THÀNH ARRAYLIST TRONG JAVA



Chúng ta có thể chuyển Array thành ArrayList bằng cách sử dụng phương thức asList() của class Arrays.


Để sử dụng phương thức asList(), trước tiên chúng ta phải importk package java.util.Arrays.


Ví dụ:




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

class Main {
    public static void main (String[] args) {
        // Tạo một mảng thông thường
        String[] arr = {"Chó""Mèo""Gà""Lợn"};
        System.out.print("Array: ");

        // In mảng
        for (String thu : arr) {
            System.out.print(thu);
            System.out.print(" ");            
        }

        // Tạo một ArrayList từ một Array
        ArrayList<StringthuNuoi = new ArrayList<>(Arrays.asList(arr));
        System.out.println("\nArrayList: " + thuNuoi);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Array: Chó Mèo Gà Lợn
ArrayList: [Chó, Mèo, Gà, Lợn]
 


CÁCH CHUYỂN MỘT ARRAYLIST THÀNH STRING TRONG JAVA


Để chuyển đổi một ArrayList thành String, chúng ta có thể sử dụng phương thức toString().


Ví dụ:




import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        ArrayList<StringthuNuoi = new ArrayList<>();

        // Thêm phần tử vào ArrayList
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        thuNuoi.add("Lợn");
        System.out.println("ArrayList: " + thuNuoi);

        // Chuyển ArrayList thành String
        String str = thuNuoi.toString();
        System.out.println("String: " + str);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



ArrayList: [Chó, Mèo, Gà, Lợn]
String: [Chó, Mèo, Gà, Lợn]
 


Lưu ý!

Phương thức toString() chuyển đổi toàn bộ ArrayList thành một Chuỗi duy nhất.


MỘT SỐ PHƯƠNG THỨC KHÁC CỦA ARRAYLIST



Ngoài những phương thức chúng ta vừa tìm hiểu ở trên, ArrayList còn bao gồm một số phương thức khác như:

  • clone(): Tạo một Array ist với cùng phần tử, kích thước và dung lượng.
  • contain(): Tìm kiếm phần tử đã chỉ định trong Array list và trả về kết quả boolean.
  • notifyCapacity(): Chỉ định tổng phần tử mà Array list có thể chứa.
  • isEmpty(): Kiểm tra xem Array list đó có trống không.
  • indexOf(): Tìm kiếm một phần tử được chỉ định trong Array list và trả về index của phần tử.
  • trimToSize(): Giảm dung lượng của Array list về kích thước hiện tại của nó.


PHẦN 5: VECTOR TRONG JAVA



Trong phần này, chúng ta sẽ tìm hiểu về class Vector trong Java và cách sử dụng nó.


Chúng ta cũng sẽ tìm hiểu xem Vector khác với ArrayList như thế nào và tại sao chúng ta nên sử dụng ArrayList thay thế.


Class Vector là một triển khai của List interface cho phép chúng ta tạo các mảng có thể thay đổi kích thước tương tự như class ArrayList.



5.1. SO SÁNH VECTOR VỚI ARRAYLIST



Trong Java, cả ArrayListVector đều triển khai List interface và cung cấp các chức năng giống nhau.


Tuy nhiên, có một số khác biệt giữa chúng.


Class Vector đồng bộ hóa từng hoạt động riêng lẻ.


Điều này có nghĩa là bất cứ khi nào chúng ta muốn thực hiện một số thao tác trên các vector, class Vector sẽ tự động áp dụng khóa cho thao tác đó.


Đó là bởi vì:


  • Khi một luồng đang truy cập vào một vector, đồng thời một luồng khác cố gắng truy cập vào nó, một ngoại lệ có tên là ConcurrencyModificationException được tạo ra.


Do đó, việc sử dụng khóa liên tục này cho mỗi thao tác làm cho vector kém hiệu quả hơn.


Tuy nhiên, trong ArrayList, các phương thức không được đồng bộ hóa.


Thay vào đó, nó sử dụng phương thức Collections.synchronizedList() để đồng bộ hóa toàn bộ danh sách.



Lưu ý!

Nên sử dụng ArrayList thay cho Vector vì vectơ không phải là luồng an toàn và nó còn kém hiệu quả.


5.2. CÁCH TẠO VECTOR TRONG JAVA



Đây là cách chúng ta có thể tạo các vectơ trong Java.



Vector<Typevector = new Vector<>();
 


Trong đó, Type cho biết kiểu của nó có thể chứa, ví dụ:



// Tạo một Vector kiểu Integer
Vector<Integervectornew Vector<>();

// Tạo một Vector kiểu String
Vector<Stringvectornew Vector<>();
 


5.3. MỘT SỐ PHƯƠNG THỨC PHỔ BIẾN CỦA VECTOR



Class Vector cũng cung cấp các triển khai mảng có thể thay đổi kích thước của List interface (tương tự như lớp ArrayList).


Một số phương thức Vector là:


THÊM PHẦN TỬ VÀO VECTOR


Có 3 phương thức bạn có thể sử dụng để thêm phần tử vào trong vector.


  • add(element): Thêm một phần tử vào vectơ
  • add(index, element): Thêm một phần tử vào vị trí đã chỉ định
  • addAll(vector): Thêm tất cả các phần tử của một vector vào một vector khác


Hãy xem ví dụ sau đây:



import java.util.Vector;

class Main {
    public static void main(String[] args) {
        Vector<StringthuNuoi = new Vector<>();

        // Sử dụng phương thức add()
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");

        // Sử dụng index
        thuNuoi.add(2"Gà");
        System.out.println("Vector: " + thuNuoi);

        // Sử dụng phương thức addAll()
        Vector<StringdongVat = new Vector<>();
        dongVat.add("Cá xấu");

        dongVat.addAll(thuNuoi);
        System.out.println("Vector mới: " + dongVat);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Vector: [Chó, Mèo, Gà]
Vector mới: [Cá xấu, Chó, Mèo, Gà]
 


TRUY CẬP CÁC PHẦN TỬ CỦA VECTOR



Chúng ta có 2 phương thức có thể sử dụng để truy cập vào phần tử của Vector:


  • get(index): Trả về một phần tử được chỉ định bởi chỉ mục
  • iterator(): Trả về một đối tượng iterator để truy cập tuần tự các phần tử vector


Hãy xem ví dụ sau:



import java.util.Vector;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        Vector<StringthuNuoi = new Vector<>();

        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");

        // Truy cập phần tử Vector sử dụng get
        String phanTuVector = thuNuoi.get(1);
        System.out.println("Truy cập phần tử 1: " + phanTuVector)

        // Truy cập phần tử Vector sử dụng iterator()
        Iterator<Stringiterate = thuNuoi.iterator();
        System.out.print("Vector: ");
        while (iterate.hasNext()){
            System.out.print(iterate.next());
            System.out.print(", ");
        }
        
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Truy cập phần tử 1: Mèo
Vector: Chó, Mèo, Gà,
 


LOẠI BỎ PHẦN TỬ KHỎI VECTOR



Chúng ta có 3 phương thức để loại bỏ phần tử khỏi Vector:


  • remove(index): Xóa phần tử ở vị trí đã chỉ định
  • removeAll(): Xóa tất cả các phần tử
  • clear(): Loại bỏ tất cả các phần tử. Nó hiệu quả hơn removeAll()


Hãy xem ví dụ sau:



import java.util.Vector;

class Main {
    public static void main(String[] args){
        Vector<StringthuNuoi = new Vector<>();
        
        // Thêm phần tử vào Vector
        thuNuoi.add("Chó");
        thuNuoi.add("Mèo");
        thuNuoi.add("Gà");
        System.out.println("Vector: " + thuNuoi);

        // Loại bỏ phần tử sử dụng index
        String loai = thuNuoi.remove(1);
        System.out.println("Loại bỏ phần tử: " + loai);
        System.out.println("Vector mới: " + thuNuoi);

        // Sử dụng clear()
        thuNuoi.clear();
        System.out.println("Vector sau khi clear: " + thuNuoi);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Vector: [Chó, Mèo, Gà]
Loại bỏ phần tử: Mèo
Vector mới: [Chó, Gà]
Vector sau khi clear: []
 


MỘT SỐ PHƯƠNG THỨC KHÁC CỦA VECTOR



Ngoài những phương thức ở trên, Vector còn có một số phương tức khác:


  • set(): Thay đổi một phần tử của vector
  • size(): Trả về kích thước của vector
  • toArray(): Chuyển đổi vectơ thành một mảng
  • toString(): chuyển đổi vectơ thành Chuỗi
  • contain(): Tìm kiếm phần tử đã chỉ định trong vector và trả về kết quả boolean


Còn tiếp....


---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0383.180086
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #icthanoi #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php
Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!