1. ArrayList
lớp học
Hôm nay chúng ta sẽ khám phá ArrayList
lớp học. Đây là lớp đầu tiên trong một số lớp được gọi là bộ sưu tập . Trong Java, các bộ sưu tập là một chủ đề rộng lớn và hữu ích đến mức toàn bộ nhiệm vụ CodeGym được dành cho chúng.
Để hiểu đầy đủ cách các bộ sưu tập được cấu trúc và tất cả các sắc thái của chúng, trước tiên bạn cần tìm hiểu OOP, giao diện, kế thừa, kiến thức cơ bản về đa luồng, v.v.
Vì vậy, hôm nay chúng ta sẽ chỉ làm quen với một loại tập hợp đơn giản nhất. Nhưng ở mức độ đủ sâu để bạn hiểu cách sử dụng và cách thức hoạt động của nó. Bây giờ, hãy gặp ArrayList
bộ sưu tập .
cốt truyện
Tôi sẽ bắt đầu với một nền tảng nhỏ. Các lập trình viên thực sự không thích một khía cạnh của mảng: thực tế là kích thước của chúng không thể thay đổi được. Điều gì sẽ xảy ra nếu bạn cần lưu trữ thêm ba phần tử trong một mảng nhưng chỉ có một ô trống?
Giải pháp duy nhất cho giới hạn không gian của một mảng là tạo một mảng rất lớn để chứa tất cả các phần tử mà bạn có thể cần lưu trữ. Nhưng điều này thường là một sự lãng phí bộ nhớ. Nếu một mảng thường chứa hai hoặc ba phần tử nhưng thậm chí có khả năng rất nhỏ là nó cần lưu trữ 100 phần tử trong số đó, thì cần phải tạo một mảng có khả năng lưu trữ 100 phần tử.
Vậy các lập trình viên đã nghĩ ra điều gì? Họ đã viết ArrayList
lớp, lớp này thực hiện công việc tương tự như Array
lớp, nhưng có thể thay đổi kích thước.
lớp ArrayList
Tên của ArrayList
lớp được hình thành từ hai từ: Mảng + Danh sách. Array
là một mảng và List
là một danh sách.
Mỗi ArrayList
đối tượng chứa một mảng các phần tử bình thường. Khi bạn đọc các phần tử từ một ArrayList
, đối tượng sẽ truy xuất chúng từ mảng bên trong của nó. Khi bạn viết các phần tử, nó sẽ ghi chúng vào mảng bên trong.
Lớp ArrayList thiếu tất cả những nhược điểm mà mảng có. Nó biết cách:
- Lưu trữ các phần tử của một loại cụ thể
- Tự động thay đổi kích thước danh sách
- Thêm phần tử vào cuối danh sách
- Chèn phần tử vào đầu hoặc giữa danh sách
- Xóa các phần tử khỏi bất kỳ đâu trong danh sách
Để biết thêm chi tiết, xem bên dưới:
2. Tạo ArrayList
đối tượng
Để tạo một ArrayList
đối tượng, bạn cần viết mã như sau:
ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();
ArrayList
Loại/lớp của bộ sưu tập ở đâu , TypeParameter
là loại của các phần tử được lưu trữ trong ArrayList
bộ sưu tập và name
là tên của một ArrayList<TypeParameter>
biến.
Biến name
có một loại chung. Nó bao gồm hai loại: loại bộ sưu tập được chỉ định trước, sau đó dấu ngoặc nhọn được sử dụng để chỉ loại phần tử được lưu trữ trong bộ sưu tập.
Ví dụ:
Mã số | Sự miêu tả |
---|---|
|
Danh sách các số nguyên |
|
Danh sách các chuỗi |
|
Danh sách các số thực |
Không giống như mảng, các bộ sưu tập không thể lưu trữ các kiểu nguyên thủy, chỉ lưu trữ các kiểu tham chiếu . Vì vậy, nếu bạn cần một bộ sưu tập int
các s, Integer
thay vào đó hãy sử dụng lớp trình bao bọc.
3. Hoạt động với mộtArrayList
Ban đầu, độ dài của danh sách mới được tạo bằng 0, vì nó chứa 0 phần tử. Nếu bạn thêm một phần tử vào danh sách, độ dài của nó sẽ tăng thêm 1. Nếu bạn xóa phần tử đã thêm, độ dài sẽ giảm về 0.
Bảng sau đây có thể cho bạn biết thêm về các phương thức của lớp ArrayList
:
phương pháp | Sự miêu tả |
---|---|
|
Thêm phần tử đã truyền vào danh sách |
|
Thêm một phần tử vào một vị trí cụ thể trong danh sách. |
|
Trả về phần tử có chỉ số làindex |
|
Gán value cho phần tử có chỉ số làindex |
|
Loại bỏ phần tử có chỉ số là index . Trả về phần tử đã loại bỏ. |
|
Loại bỏ phần tử mà bạn truyền vào phương thức. Nếu có nhiều hơn một phần tử như vậy, phần tử đầu tiên sẽ bị xóa. |
|
Xóa danh sách, nghĩa là xóa tất cả các phần tử khỏi danh sách. |
|
Kiểm tra xem danh sách có chứa value . |
|
Kiểm tra xem danh sách có rỗng hay không. Nói cách khác, độ dài của danh sách có bằng không hay không. |
|
Trả về kích thước của danh sách, tức là số phần tử trong danh sách. |
|
Trả về một mảng chứa các phần tử của danh sách. Bạn cần truyền mảng cho phương thức. |
Các phương thức này cho phép bạn thực hiện hầu hết mọi thứ bạn muốn với danh sách: hoán đổi phần tử, thêm phần tử và xóa phần tử. Bạn có thể xóa danh sách bằng một lệnh hoặc thậm chí chuyển đổi danh sách thành một mảng.
4. So sánh ArrayList
vàArray
Tôi không nghĩ rằng chúng ta có thể tránh so sánh ArrayList
và một mảng.
Chỉ có 4 hành động bạn có thể thực hiện với mảng:
- Tạo một mảng
- Nhận một phần tử theo chỉ mục
- Đặt một phần tử theo chỉ mục
- Lấy độ dài của mảng
Dưới đây là các thao tác này khi chúng áp dụng cho một mảng và một ArrayList
:
Mảng | Lập danh sách |
---|---|
|
|
|
|
|
|
|
|
Hãy so sánh cách thức ArrayList
hoạt động của một mảng so với cách thức hoạt động của một mảng. Ví dụ: hãy thực hiện tác vụ này: "đọc 10 chuỗi từ bàn phím và hiển thị chúng trên màn hình theo thứ tự ngược lại"
Sử dụng mảng | Sử dụng ArrayList |
---|---|
|
|
Sự tương tự là rõ ràng. Mọi thứ bằng cách nào đó ngắn hơn và rõ ràng hơn đối với mảng. Nhưng ArrayList
cũng không khó: để lấy một phần tử, chúng ta sử dụng get()
phương thức; để thay đổi một phần tử, set()
phương thức; để lấy độ dài của danh sách, size()
phương thức.
Vậy tại sao các lập trình viên sử dụng ArrayList
lớp?
Tất nhiên, toàn bộ vấn đề là tất cả các phương thức khác mà các mảng thông thường không có:
- Thêm một phần tử vào danh sách
- Thêm phần tử vào giữa danh sách
- Tìm một phần tử trong danh sách
- Xóa một phần tử khỏi danh sách