Bài giảng Lập trình Java - Bài 5: Arraylist

Mảng có số phần tử cố định. Vì vậy có các nhược

điểm sau:

Không thể bổ sung thêm hoặc xóa bớt các phần tử.

Lãng phí bộ nhớ

Nếu khai báo mảng với kích thước lớn để nắm giữ một vài

phần tử.

Khai báo mảng với kích thước nhỏ thì không đủ chứa

ArrayList giúp khắc phục nhược điểm nêu trên

của mảng.

ArrayList có thể được xem như mảng động, có thể

thêm bớt các phần tử một cách mềm dẻo.

ArrayList còn cho phép thực hiện các phép toán

tập hợp như hợp, giao, hiệu

pdf 20 trang kimcuc 15640
Bạn đang xem tài liệu "Bài giảng Lập trình Java - Bài 5: Arraylist", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình Java - Bài 5: Arraylist

Bài giảng Lập trình Java - Bài 5: Arraylist
LẬP TRÌNH JAVA 1 
BÀI 5: ARRAYLIST 
MỤC TIÊU 
Kết thúc bài học này bạn có khả năng 
Hiểu và ứng dụng ArrayList 
Hiểu và ứng dụng các hàm tiện ích của Collections 
ARRAYLIST LÀ GÌ? 
Mảng có số phần tử cố định. Vì vậy có các nhược 
điểm sau: 
Không thể bổ sung thêm hoặc xóa bớt các phần tử. 
Lãng phí bộ nhớ 
Nếu khai báo mảng với kích thước lớn để nắm giữ một vài 
phần tử. 
Khai báo mảng với kích thước nhỏ thì không đủ chứa 
ArrayList giúp khắc phục nhược điểm nêu trên 
của mảng. 
ArrayList có thể được xem như mảng động, có thể 
thêm bớt các phần tử một cách mềm dẻo. 
ArrayList còn cho phép thực hiện các phép toán 
tập hợp như hợp, giao, hiệu 
ARRAYLIST 
ArrayList a = new ArrayList(); 
a.add(“Cường”); 
a.add(true); 
a.add(1); 
a.add(2.5) 
Integer x = (Integer)a.get(2); 
Object 
Object 
Object 
Object 
a.add(Object) a.get(index) 
(type) 
ArrayList 
+ Khi add thêm số nguyên thủy 
thì tự động chuyển sang đối 
tượng kiểu wrapper 
+ Khi truy xuất các phần tử, cần 
ép về kiểu gốc của phần tử để 
xử lý 
ARRAYLIST ĐỊNH KIỂU 
ArrayList 
ArrayList 
(Không định kiểu) 
ArrayList 
(Có định kiểu) 
ArrayList có thể chứa các phần tử bất 
kể loại dữ liệu gì. 
+ Các phần tử trong ArrayList được 
đối xử như một tập các đối tượng 
(kiểu Object) 
+ Khi truy xuất các phần tử, cần ép về 
kiểu gốc của phần tử để xử lý 
ArrayList chỉ chứa các phần tử có 
kiểu đã chỉ định. 
+ Khi truy xuất các phần tử không 
cần ép về kiểu gốc của phần tử để 
xử lý 
+ Chặt chẽ, tránh rũi ro lập trình 
nhầm dữ liệu 
+ Hiệu suất xử lý nhanh hơn 
ARRAYLIST ĐỊNH KIỂU 
ArrayList a = new ArrayList(); 
a.add(“Cường”); 
a.add(“Tuấn”); 
a.add(“Phương”); 
a.add(“Hạnh”) 
String s = a.get(2); 
String 
String 
String 
String 
a.add(String) a.get(index) 
ArrayList 
+ Khi truy xuất các phần tử không 
cần ép về kiểu gốc của phần tử 
để xử lý 
Chú ý: là kiểu dữ liệu không phải kiểu nguyên thủy (phải sử dụng wrapper) 
THAO TÁC THƯỜNG DÙNG 
PHƯƠNG THỨC MÔ TẢ 
boolean add(Object) Thêm vào cuối 
void add(int index, Object elem) Chèn thêm phần tử vào vị trí 
boolean remove(Object) Xóa phần tử 
Object remove(int index) Xóa và nhận phần tử tại vị trí 
void clear() Xóa sạch 
Object set(int index, Object elem) Thay đổi phần tử tại vị trí 
Object get(int index) Truy xuất phần tử tại vị trí 
int size() Số phần tử 
boolean contains(Object) Kiểm tra sự tồn tại 
boolean isEmpty() Kiểm tra rỗng 
int indexOf(Object elem) Tìm vị trí phần tử 
THAO TÁC ARRAYLIST 
ArrayList a = new ArrayList(); 
a.add(“Cường”); 
a.add(“Tuấn”); 
a.add(“Phương”); 
a.add(“Hồng”); 
a.add(1, “Hạnh”); 
a.set(0, “Tèo”); 
a.remove(3) 
[Cường] 
[Cường, Tuấn] 
[Cường, Tuấn, Phương] 
[Cường, Tuấn, Phương, Hồng] 
[Cường, Hạnh, Tuấn, Phương, Hồng] 
[Tèo, Hạnh, Tuấn, Phương, Hồng] 
[Tèo, Hạnh, Tuấn, Hồng] 
TRẮC NGHIỆM 
ArrayList a = new ArrayList(); 
a.add(“Cường”); 
a.add(“Tuấn”); 
a.add(“Phương”); 
a.add(“Hồng”); 
a.add(1, “Hạnh”); 
a.set(0, “Tèo”); 
a.remove(3); 
a.remove(“Phương”); 
int x = a.size() – a.indexOf(“Hồng”); 
1. Biến x có giá trị bằng bao nhiêu? 
A. 0 
B. 1 
C. 2 
D. 3 
E. 4 
2. Nếu thay a.indexOf(“Hồng”) bằng 
a.indexOf(“Phương”) thì kết quả x có giá trị là bao nhiêu 
DUYỆT ARRAYLIST 
Duyệt theo chỉ số với for hoặc sử dụng for-each. 
Với ArrayList for-each thường được sử dụng hơn 
ArrayList a = new ArrayList(); 
a.add(5); 
a.add(9); 
a.add(4); 
a.add(8) 
for(int i=0;i<a.size();i++){ 
 Integer x = a.get(i); 
 > 
} 
for(Integer x : a){ 
 > 
} 
DEMO 
Nhập vào danh sách số thực ArrayList. 
Tính tổng và xuất ra màn hình 
ĐỀ MÔ: QL SVPOLY 
Sử dụng ArrayList để nắm giữ danh 
sách sinh viên. Thông tin mỗi sinh viên gồm họ 
tên và điểm trung bình. Viết chương trình thực 
hiện việc quản lý như menu sau: 
1. Nhập danh sách sinh viên 
2. Xuất danh sách sinh viên đã nhập 
3. Xuất danh sách sinh viên theo khoảng điểm 
4. Tìm sinh viên theo họ tên 
5. Tìm và sửa sinh viên theo họ tên 
6. Tìm và xóa theo họ tên 
7. Kết thúc 
public class SVPoly{ 
public String hoTen; 
public Double diemTB; 
} 
THAO TÁC TẬP HỢP 
PHƯƠNG THỨC MÔ TẢ 
addAll(Collection) Hợp 2 tập hợp 
removeAll(Collection) Hiệu 2 tập hợp 
retainAll(Collection) Giao 2 tập hợp 
boolean containsAll(Collection) Kiểm tra sự tồn tại 
toArray(T[]) Chuyển đổi sang mảng 
ArrayList a1 = new ArrayList(); 
a1.add(3); 
a1.add(4); 
ArrayList a2 = new ArrayList(); 
a2.add(4); 
a2.add(5); 
a1.addAll(a2) a1=[3,4,4,5] 
a1.retainAll(a2) a1=[4] 
a1.removeAll(a2) a1=[3] 
a1.containsAll(a2) false 
THAO TÁC ARRAYLIST NÂNG CAO 
 Lớp tiện ích Collections cung cấp các hàm tiện ích 
hỗ trợ việc xử lý ArrayList 
PHƯƠNG THỨC MÔ TẢ 
int binarySearch (List list, Object key) Tìm kiếm theo thuật toán chia đôi 
void fill (List list, Object value) Gán giá trị cho tất cả phần tử 
void shuffle (List list) Hoán vị ngẫu nhiên 
void sort (List list) Sắp xếp tăng dần 
void reverse (List list) Đảo ngược 
void rotate (List list, int distance) Xoay vòng 
void swap(List list, int i, int j) Tráo đổi 
THAO TÁC ARRAYLIST NÂNG CAO 
ArrayList a = new ArrayList(); 
a.add(3); 
a.add(9); 
a.add(8); 
a.add(2); 
Collections.swap(a, 0, 2); 
Collections.shuffle(a); 
Collections.sort(a); 
Collections.reverse(a); 
[3, 9, 8, 2] 
[8, 9, 3, 2] 
[X, X, X, X] 
[2, 3, 8, 9] 
[9, 8, 3, 2] 
DEMO 
Nhập danh sách 5 câu hỏi. Tráo ngẫu 
nhiên và xuất danh sách câu hỏi đã tráo 
SẮP XẾP NÂNG CAO 
Có 2 cách sử dụng Collections.sort() để sắp xếp 
ArrayList 
Cách 1: Collections.sort(ArrayList) đối với các 
phần tử có khả năng so sánh (Integer, Double, 
String) 
Cách 2: Collections.sort(ArrayList, Comparator) 
bổ sung tiêu chí so sánh cho các phần tử. Cách 
này thường áp dụng cho các lớp do người dùng 
định nghĩa (NhanVien, SinhVienPoly) 
CÁCH 2 
Tiêu chí so sánh được chỉ ra để thực hiện việc 
sắp xếp. Trong bài này tiêu chí so sánh 2 SVPoly 
là so sánh theo điểm. 
 ArrayList list = new ArrayList(); 
Comparator comp = new Comparator() { 
@Override 
public int compare(SVPoly o1, SVPoly o2) { 
return o1.diemTB.compareTo(o2.diemTB); 
} 
}; 
Collections.sort(list, comp); 
Kết quả của compare() được sử dụng để 
sắp xếp o1 và o2. Có 3 trường hợp xảy ra: 
 = 0: o1 = o2 
 > 0: o1 > o2 
 < 0: o1 < o2 
DEMO 
 Bổ sung vào đề mô QL SVPoly 
8. Sắp xếp theo điểm 
9. Sắp xếp theo họ và tên 
TỔNG KẾT NỘI DUNG BÀI HỌC 
Giới thiệu ArrayList 
ArrayList có định kiểu 
Thao tác ArrayList 
Lớp tiện ích Collections 

File đính kèm:

  • pdfbai_giang_lap_trinh_java_bai_5_arraylist.pdf