Tải bản đầy đủ (.pptx) (17 trang)

Bài giảng cấu trúc dữ liệu chương 3 nguyễn xuân vinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (316.09 KB, 17 trang )

GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
1

CẤU TRÚC DỮ LIỆU
DATA STRUCTURES
[214331]

MẢNG
(Arrays)
Nguyễn Xuân Vinh



GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
2

Mảng (Arrays)
 Collection duy nhất được hỗ trợ sẵn trong ngôn ngữ lập trình Java.
 Dùng để lưu trữ một tập các phần tử theo thứ tự và có thể được
truy xuất thông qua chỉ mục index.
 Là lớp con của Object và hiện thực cả 2 interface Serializable và
Cloneable.
 Không có .java source file để xem cách thức làm việc bên trong
của 1 mảng như thế nào.
 Khi tạo ra 1 mảng cần chỉ định kích thước và kiểu dữ liệu, sau đó


có thể đưa các phần tử có cùng kiểu đã định sẵn vào trong mảng
cho tới khi mảng đầy.


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
3

Tính chất của mảng (Arrays)
 Ưu điểm:
 Truy xuất nhanh.
 Sử dụng đơn giản.

 Nhược điểm:
 Phải chỉ định một kích thước cụ thể tại thời điểm xây dựng mảng.
 Tuân thủ luật đầy.
 Việc bố trị lại khá 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ó bao nhiêu
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 và gán trực tiếp:

String names[] = new String[]{"Leonardo", "da", "Vinci"};
String names[] = {"Leonardo", "da", "Vinci"};

4

/17

12/3/15

String names[] = new String[3]{"Leonardo", "da", "Vinci"}; ???

 Các phần tử trong mảng có thể là:
 Kiểu dữ liệu nguyên thủy (primitive date type).
 Kiểu dữ 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 của mảng


6

/17

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Quản lý bộ 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
7

Mảng dữ liệu nguyên thủy (Primitive data type)
Mảng chứa giá trị thực sự



GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
8

Mảng đối tượng (Reference data type)
Mảng chỉ chứa các tham chiếu (references) tới đối tượng thật sự


GV: NGUYỄN XUÂN VINH

Mảng đa chiều
 Khi mỗi phần tử của 1 mảng trỏ tới 1 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];


9

/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 trên mảng
1)
2)
3)
4)
5)

Duyệt mảng
Copy và clone mảng
Phép gán mảng
Kiểm tra 2 mảng bằng nhau
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 1
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
// Cách 2
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 và Cloning mảng
 Để sao chép các phần tử từ mảng này sang mảng khác ta dùng
System.arraycopy():
int[] arrays = new int[10];
// Cách 1
int[] clone1 = new int[10];
System.arraycopy(arrays, 0, clone1, 0, 10);
// Cách 2
int[] clone2 = Arrays.copyOfRange(arrays, 0, 10);
// Cách 3
int[] clone3 = new int[10];
for(int i=0; iclone3[i] = arrays[i];
}


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
13

3) Phép gán mảng
Button buttons[] = {
new Button ("One"),
new Button("Two"),
new Button("Three")
};
Component components[] = buttons;



GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
14

4) Hai mảng bằng nhau
 “==”: kiểm tra 2 mảng có cùng vị trí bộ nhớ (memory space) hay
không.
boolean b1 = (array == clone);
 “Arrays.equals()”: kiểm tra 2 mảng có bằng nhau theo nghĩa “tự
nhiên” hay không.
boolean b2 = Arrays.equals(array, clone);


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
15

5) Thêm phần tử vào mảng
int[] arrays = new int[4];
// Khi mảng chưa đầy
arrays[0] = 0;
arrays[1] = 1;
arrays[2] = 2;
arrays[3] = 3;
// Khi mảng đã đầy

int[] newArrays = new int[5];
for(int i=0; inewArrays[i] = arrays[i];
}
newArrays[4] = 4;


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/17
16

Tóm tắt
 Mảng là gì?
 Ưu và nhược điểm của mảng.
 Tạo mảng.
 Giá trị mặc định của mảng.
 Quản lý bộ nhớ của mảng trong JVM. (Memory Allocation).
 Mảng đa chiều.
 Các phép toán trên mảng:
 Duyệt mảng
 Copy & Clone
 Assign
 Compare (= =)
 Thêm phần tử vào mảng.


17


/17

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

HỎI ĐÁP



×