GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] MẢNG (Arrays) Nguyễn Xuân Vinh nguyenxuanvinh@hcmuaf.edu.vn GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 Mảng (Arrays) Collection hỗ trợ sẵn ngôn ngữ lập trình Java Dùng để lưu trữ tập phần tử theo thứ tự truy xuất thông qua mục index Là lớp Object thực interface Serializable Cloneable Khơng có java source file để xem cách thức làm việc bên mảng Khi tạo mảng cần định kích thước kiểu liệu, sau đưa phần tử có kiểu định sẵn vào mảng mảng đầy GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 Tính chất mảng (Arrays) Ưu điểm: Truy xuất nhanh Sử dụng đơn giản Nhược điểm: Phải định kích thước cụ thể thời điểm xây dựng mảng Tuân thủ luật đầy Việc bố trị lại phức tạp GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Tạo mảng (arrays) Bước 1: Khai báo mảng (Declaration) String[] names; Có cách đặt dấu []? Bước 2: Khởi tạo mảng (Initialization) names = new String[3]; Bước 3: Gán giá trị (Assignment) names[0] = "Leonardo"; names[1] = "da"; names[2] = "Vinci"; Cách tạo gán trực tiếp: String names[] = new String[]{"Leonardo", "da", "Vinci"}; String names[] = {"Leonardo", "da", "Vinci"}; /17 12/3/15 String names[] = new String[3]{"Leonardo", "da", "Vinci"}; ??? Các phần tử mảng là: Kiểu liệu nguyên thủy (primitive date type) Kiểu liệu dạng Object (Reference date type) 5 /17 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Giá trị mặc định mảng /17 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Quản lý nhớ mảng (Array Memory Allocation) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 Mảng liệu nguyên thủy (Primitive data type) Mảng chứa giá trị thực GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 Mảng đối tượng (Reference data type) Mảng chứa tham chiếu (references) tới đối tượng thật GV: NGUYỄN XUÂN VINH Mảng đa chiều Khi phần tử mảng trỏ tới mảng khác, ta có mảng đa chiều (multidimensional array) Khai báo (declaration) MÔN: CẤU TRÚC DỮ LIỆU int A[][]; Khởi tạo (Initialization) A = new int[3][4]; Gán giá trị (Assignment) A[0][0] = 1; Truy vấn mảng (Query) int x = A[1][3]; /17 12/3/15 x=? GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 10 Các phép toán mảng 1) 2) 3) 4) 5) Duyệt mảng Copy clone mảng Phép gán mảng Kiểm tra mảng Thêm phần tử vào mảng GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 11 1) Duyệt mảng int[] arrays = new int[4]; arrays[0] = 0; arrays[1] = 1; arrays[2] = 2; arrays[3] = 3; Index of arrays // Cách for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } // Cách for (int i : arrays) { System.out.println(i); } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /17 12 2) Copying Cloning mảng Để chép phần tử từ mảng sang mảng khác ta dùng System.arraycopy(): int[] arrays = new int[10]; // Cách int[] clone1 = new int[10]; System.arraycopy(arrays, 0, clone1, 0, 10); // Cách int[] clone2 = Arrays.copyOfRange(arrays, 0, 10); // Cách int[] clone3 = new int[10]; for(int i=0; i