Mục lục
ArrayList là một class implement từ interface List và dựa trên Array data structure. ArrayList được sử dụng rất nhiều trong java bởi các chức năng và tính linh hoạt của nó.
ArrayListlà một mảng động có thể thay đổi cách thích tuỳ thuộc vào số lượng phần tử được thêm vào hoặc xoá đi.
Sơ đồ thừa kế
Sử dụng Array hay ArrayList?
Array là một mảng các số lượng phần tử cố định, nghĩa rằng bạn sẽ không thể thêm bất kỳ phần tử nào vào Array nếu nó đã chứa đầy phần tử. Mặc khác, nếu bạn xoá một phần tử trong Array vẫn sẽ không co lại và vẫn tốn một lượng memory như vậy.
ArrayList là một mảng các các phần tử linh động, nó có thể tăng hoặc giảm kích thước khi bạn thêm hoặc xoá các phần tử trong mảng. Ngoài ra nó còn cung cấp các method giúp chúng ta dễ dàng thao tác với mảng phần tử hơn.
Các bạn hãy tưởng tượng nếu cần thêm hoặc xoá một phần tử tại vị trí index trong Array, thì chúng ta sẽ có nhiều việc để làm lắm đấy. Và tưởng tượng các bạn sẽ phải lặp đi lặp lại các bước như vậy khi cần thao tác với mảng thì thật là khó chịu đúng không nào?
Minh hoạ thêm phần tử
Minh hoạ xoá phần tử
Khởi tạo một ArrayList
// Cách 1 ArrayList<Kiểu dữ liệu> <name> = new ArrayList<>(); // Cách 2 List<Kiểu dữ liệu> <name> = new ArrayList<>();
Kiểu dữ liệu dùng để xác định các thành phần có thể có trong ArrayList. Ví dụ
List<String> strings = new ArrayList<>();
Chúng ta sẽ một ArrayList với các phần tử có kiểu String.
Note: Các kiểu dữ liệu nguyên thuỷ không được phép trong ArrayList.
List<int> arrs = new ArrayList<>(); => Error
Thêm phần tử vào ArrayList
Để thêm một phần tử vào một ArrayListchúng ta sử dụng method add().
// add the element at the end ArrrayList strs.add("deftBlog"); // add the element at specified index strs.add(5, "milo");
Ví dụ
import java.util.*; public class Main { public static void main(String[] args) { List<String> strs = new ArrayList<>(); strs.add("str 0"); strs.add("str 1"); strs.add("str 2"); strs.add("str 3"); System.out.println(strs); strs.add(2, "deft"); System.out.println(strs); } }
Output
[str 0, str 1, str 2, str 3]
[str 0, str 1, deft, str 2, str 3]
Xoá phần tử trong ArrayList
import java.util.*; public class Main { public static void main(String[] args) { List<String> strs = new ArrayList<>(); strs.add("str 0"); strs.add("str 1"); strs.add("str 2"); strs.add("str 3"); System.out.println(strs); // remove by value strs.remove("str 0"); System.out.println(strs); // remove by index strs.remove(2); System.out.println(strs); } }
output
[str 0, str 1, str 2, str 3]
[str 1, str 2, str 3]
[str 1, str 2]
Duyệt các phần tử trong ArrayList
Để duyệt các phần tử trong ArrayList chúng ta có 3 cách chính:
- Vòng lặp For
- Vòng lặp for rút gọn
- ForEach
Sau đây, chúng ta cần đi qua từng cách để xem cú pháp và cách sử dụng của chúng.
Array For
Đây có lẽ là cách quen thuộc tính nhất đối với các bạn mới bắt đầu học Java. Vì cú pháp này các bạn đã được tiếp xúc ngay từ đầu học Java,
import java.util.*; public class Main { public static void main(String args[]) { ArrayList<String> alist = new ArrayList<>(); alist.add("Gregor Clegane"); alist.add("Khal Drogo"); alist.add("Cersei Lannister"); alist.add("Sandor Clegane"); alist.add("Tyrion Lannister"); for(int i = 0; i < alist.size(); i++) { System.out.println(alist.get(i)); } } }
Output
Gregor Clegane Khal Drogo Cersei Lannister Sandor Clegane Tyrion Lannister
ArrayList – For rút gọn
Tuy nhiên, các bạn có thể thấy rằng, việc phải khai báo biến i để giữ Index trong ArrayList là điều không cần thiết. Do vậy
import java.util.*; public class Main { public static void main(String args[]) { ArrayList<String> alist = new ArrayList<>(); alist.add("Gregor Clegane"); alist.add("Khal Drogo"); alist.add("Cersei Lannister"); alist.add("Sandor Clegane"); alist.add("Tyrion Lannister"); //iterating ArrayList for (String str : alist) { System.out.println(str); } } }
ArrayList – ForEach
Ngoài ra thì ArrayList cũng cung cấp forEach method cho phép duyệt các phần tử.
import java.util.*; public class Main { public static void main(String args[]) { ArrayList<String> alist = new ArrayList<>(); alist.add("Gregor Clegane"); alist.add("Khal Drogo"); alist.add("Cersei Lannister"); alist.add("Sandor Clegane"); alist.add("Tyrion Lannister"); alist.forEach(str -> System.out.println(str)); } }
Các method trong ArrayList
Chúng ta đã tìm hiểu sơ cách ArrayList hoạt động. Ngoài các method cho phép thêm và xoá phần tử thì ArrayList còn cung cấp những method khác giúp cho việc lập trình chúng ta trở nên dễ dàng hơn. Hãy Xem qua và nhớ những method này giải giải quyết cho chúng ta vấn đề gì, chứ không cần học thuộc lòng vì IDE hiện giờ đều có các chức năng gợi ý cho bạn.
1, boolean add(Object o): Thêm một phần tử vào ArrayList
obj.add("deft");
2, boolean add(int index, Object o): Thêm một phần tử vào vị trí index. Nếu index không hợp lệ chúng ta sẽ nhận lại một IndexOutOfBoundsException.
obj.add(2, "deft");
3, boolean remove(Object o): Xoá object o khỏi ArrayList, object o này phải chứa trong ArrayList.
obj.remove("deft");
4, boolean remove(int index): Xoá một phần tử tại vị trí index, nếu index không hợp lệ chúng ta sẽ nhận IndexOutOfBoundsException.
obj.remove(3);
5, Object set(int index, Object o): Cập nhật phần tử tại vị trí index, nếu index không hợp lệ chúng ta sẽ nhận IndexOutOfBoundsException.
obj.set(3, "update");
6, int indexOf(Object o): Lấy vị trí index của object o trong ArrayList, nếu object o không chứa trong ArrayList nhận kết -1.
int pos = obj.indexOf("deft);
7, Object get(int index): Return object tại vị trí index trong ArrayList.
String str = obj.get(3);
8, int size(): lấy số lượng phần tử chứa trong ArrayList
int size = obj.size();
9, boolean contains(Object o): Kiểm tra phần tử object o có chứa trong ArrayList, nếu có return true, ngược lại false.
boolean isExist = obj.contains("deft");
10, void clear(): Xoá tất cả các phần tử trong ArrayList
obj.clear();
11, int lastIndexOf(): Lấy vị trí xuất hiện cuối cùng của phần tử.
Danh sách các bài viết về ArrayList
ArrayList cơ bản
- Giới thiệu ArrayList
- Khởi tại ArrayList
- Vòng lặp trong ArrayList
- Tìm độ dài của ArrayList
- Add phần tử vào ArrayList
- Remove phần tử khỏi ArrayList
- Clear các phần tử trong ArrayList
- Replace trong ArrayList
- Convert array sang ArrayList
ArrayList sorting
- Hiểu về ArrayList sorting và Comparator
- Sort tăng và giảm dần trong ArrayList
- Sắp xếp nâng cao trong ArrayList
- Sort ArrayList chứa các phần tử null
ArrayList searching
- Lấy list con trong ArrayList
- Tìm vị trí đầu tiên và cuối cùng của phần tử trong ArrayList
- Lấy phần tử trong ArrayList
- Kiểm tra sự tồn tại của phần tử trong ArrayList
ArrayList with Stream API
- Sort ArrayList với Stream API
- Search ArrayList với Stream API
- Map ArrayList với Stream API
- FlatMap ArrayList với Stream API
Nguồn tham khảo
https://www.geeksforgeeks.org/arraylist-in-java/
ArrayList in java with example programs – Collections Framework