Array và List
Nội dung bài · 6 mục
Một giỏ hàng có nhiều món, một cửa hàng có nhiều sản phẩm. Khi có hàng trăm
món, không thể tạo từng biến price1, price2, price3. Bài này giới thiệu
cách lưu nhiều giá trị trong một biến.
Khái niệm
🗃️ Array: danh sách các phần tử cùng kiểu, số lượng cố định ngay khi tạo.
📋 List: danh sách các phần tử cùng kiểu, thêm và bớt phần tử được, viết là List<kiểu>.
👣 foreach (for-each): vòng lặp đi qua lần lượt từng phần tử của một danh sách, viết là for (kiểu x : danh_sách).
Phần tử được đánh số từ 0. Phần tử đầu ở vị trí 0, phần tử cuối ở vị trí
số lượng - 1.
Ví dụ
void main() {
long[] prices = { 5000, 12000, 30000 };
System.out.println(prices[0]); // 5000
System.out.println(prices.length); // 3
List<String> cart = new ArrayList<>();
cart.add("Bút bi");
cart.add("Vở");
cart.add("Thước");
cart.remove("Vở");
System.out.println(cart.size()); // 2
System.out.println(cart.get(1)); // Thước
}long[]là array chứalong. Tạo xong thì luôn có đúng 3 phần tử, đọc bằngprices[0].List<String>là list chứaString, tạo bằngnew ArrayList<>().addthêm vào cuối,removexoá phần tử,get(1)đọc phần tử ở vị trí 1.- Array đếm bằng
.length, list đếm bằng.size(). - Trong
< >phải ghiLong,Integerthay cholong,int:List<Long>, không viếtList<long>. - Trong thực tế, list được dùng nhiều hơn vì thêm bớt được.
Duyệt bằng foreach
foreach lấy lần lượt từng phần tử, không cần biến đếm. List dưới đây được
điền sẵn phần tử bằng List.of(...) ngay lúc khai báo:
void main() {
List<Long> prices = List.of(5000L, 12000L, 30000L);
long total = 0;
for (long price : prices) {
total = total + price;
}
System.out.println(total); // 47000
}Cần biết vị trí của phần tử thì dùng for với prices.get(i). Chỉ cần giá
trị thì dùng foreach. List tạo bằng List.of không thêm bớt được.
Thử ngay
Dán vào Main.java rồi chạy java Main.java:
void main() {
List<String> cart = new ArrayList<>();
cart.add("Bút bi");
cart.add("Vở");
cart.add("Bút bi");
System.out.println(cart.size());
System.out.println(cart.contains("Thước"));
for (String item : cart) {
System.out.println("- %s".formatted(item));
}
}Đoán trước khi chạy: thêm "Bút bi" hai lần thì cart.size() là 2 hay 3?
Xem kết quả
3
false
- Bút bi
- Vở
- Bút biLà 3. List giữ nguyên mọi phần tử được thêm vào, kể cả phần tử trùng, và giữ đúng thứ tự thêm.
Lỗi hay gặp
Truy cập ngoài phạm vi. List có 3 phần tử thì vị trí cuối là 2, không phải 3.
// SAI — lỗi khi chạy: không có phần tử ở vị trí 3
void main() {
List<String> cart =
List.of("Bút bi", "Vở", "Thước");
System.out.println(cart.get(3));
}// ĐÚNG — phần tử cuối ở vị trí size() - 1
void main() {
List<String> cart =
List.of("Bút bi", "Vở", "Thước");
System.out.println(cart.get(cart.size() - 1));
}Thêm phần tử vào array. Array cố định số lượng, không có add.
// SAI — lỗi compile: array không có add
void main() {
String[] tags = { "sale", "new" };
tags.add("hot");
}// ĐÚNG — cần thêm bớt thì dùng List
void main() {
List<String> tags = new ArrayList<>();
tags.add("sale");
tags.add("new");
tags.add("hot");
}Tóm tắt
- Array cố định số lượng, list thêm bớt được. Thường dùng list.
- Vị trí đánh số từ 0, phần tử cuối ở vị trí
size() - 1. add,remove,get,contains,size()là những thao tác hay dùng của list.foreachduyệt từng phần tử khi không cần biết vị trí.
Tự kiểm tra
0/3 câuint[] scores = { 8, 9, 10 }; System.out.println(scores[1]); In ra gì?
Bạn cần lưu danh sách món khách thêm vào giỏ, số món thay đổi liên tục. Nên dùng gì?
List<Integer> ids có 5 phần tử. Vòng lặp for nào duyệt đúng hết, không lỗi?