1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình Java cơ bản

62 1,4K 11
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập trình Java cơ bản
Tác giả Cao Đức Thông, Trần Minh Tuấn
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Lập trình Java
Thể loại Bài giảng
Định dạng
Số trang 62
Dung lượng 368 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình Java cơ bản

Trang 1

Lập trình Java cơ bản

Cao Đức Thông - Trần Minh Tuấn

cdthong@ifi.edu.vn , tmtuan@ifi.edu.vn

Trang 5

Linked List

• Thể hiện Node thông qua lớp tự tham chiếu (self-referential class)

class Node {

private int data;

private Node nextNode;

// constructors and methods

}

Trang 6

Linked List

• Một linked list được quản lý bởi tham

chiếu tới node đầu và node cuối.

Trang 7

Cài đặt Linked List

// Dinh nghia mot node trong linked list

Trang 8

Cài đặt Linked List

// Dinh nghia lop LinkedList

public class LinkedList

{

private ListNode firstNode;

private ListNode lastNode;

public LinkedList()

Trang 9

Cài đặt Linked List

public void insertAtBack( int insertItem )

else

firstNode = firstNode.nextNode;

Trang 10

Cài đặt Linked List

public int removeFromBack()

{

int removeItem = -1;

if ( ! isEmpty() ){

ListNode current = firstNode;

while ( current.nextNode != lastNode ) current = current.nextNode;

lastNode = current;

current.nextNode = null;

Trang 11

Cài đặt Linked List

public boolean isEmpty()

ListNode node = firstNode;

while (node != null){

System.out.print(node.data + " ");

node = node.nextNode;

}System.out.println("\n");

}

}

Trang 12

Mô tả insertAtFront

firstNode

12 new ListNode

(a)

firstNode

12 new ListNode

(b)

Trang 14

12

Trang 15

Mô tả removeFromBack

5

5

11 7

11

Trang 17

• Stack là một cấu trúc theo kiểu LIFO (Last

In First Out), phần tử vào sau cùng sẽ

được lấy ra trước.

• Hai thao tác cơ bản trên Stack

• Chèn phần tử: Luôn chèn vào đỉnh Stack (push)

• Lấy ra phần tử: Luôn lấy ra từ đỉnh Stack (pop)

Trang 18

public int pop() { return stackList.removeFromFront(); }

public boolean isEmpty() { return stackList.isEmpty(); }

Trang 20

• Queue (Hàng đợi) là cấu trúc theo kiểu

FIFO (First In First Out), phần tử vào trước

sẽ được lấy ra trước.

• Chèn phần tử: Luôn chèn vào cuối hàng đợi (enqueue)

• Lấy ra phần tử: Lấy ra từ đầu hàng đợi

(dequeue)

Trang 23

• Tree là một cấu trúc phi tuyến (non-linear)

• Mỗi node trên cây có thể có nhiều liên kết tới node khác.

Nút gốc

Nút lá Nút trong

Trang 24

Binary Search Tree

• Cây nhị phân là cây mà mỗi node không có quá 2 node con.

• Cây tìm kiếm nhị phân là cây nhị phân mà:

• Giá trị các nút thuộc cây con bên trái nhỏ hơn giá trị của nút cha.

• Giá trị các nút thuộc cây con bên phải lớn hơn giá trị của nút cha.

• Duyệt cây nhị phân

• Inorder traversal

• Preorder traversal

Trang 25

Binary Search Tree

• Ví dụ về Binary Search Tree

Trang 26

Cài đặt Binary Search Tree

public class TreeNode

{

int data;

TreeNode leftNode, rightNode;

public TreeNode( int nodeData )

} else if ( value > data ) {

if ( rightNode == null ) rightNode = new TreeNode(value);

Trang 27

Cài đặt Binary Search Tree

public class Tree

Trang 28

Cài đặt Binary Search Tree

public void inorderTraversal()

Trang 29

Cài đặt Binary Search Tree

private void inorder( TreeNode node )

Trang 30

Sử dụng Binary Search Tree

public class TreeTest

for ( int i = 1; i <= 10; i++ ) {

value = ( int ) ( Math.random() * 100 );

Trang 31

Bài tập tại lớp

• Bài 1: Dùng Stack để viết chương trình in

ra dạng nhị phân của một số nguyên

dương cho trước.

lớp Tree để tìm một phần tử có giá trị cho trước.

Trang 32

• Thêm/Xoá đối tượng vào/khỏi collection

• Kiểm tra một đối tượng có ở trong collection không

• Lấy một đối tượng từ collection

• Duyệt các đối tượng trong collection

Trang 33

• Là một kiến trúc hợp nhất để biểu diễn và thao tác trên các collection.

• Giúp cho việc xử lý các collection độc lập với biểu diễn chi tiết bên trong của chúng.

Trang 34

Collections Framework

Framework

• Giảm thời gian lập trình

• Tăng cường hiệu năng chương trình

• Dễ mở rộng các collection mới

• Khuyến khích việc sử dụng lại mã chương trình

Trang 35

Collections Framework

• Interfaces: Là các giao tiếp thể hiện tính chất của các kiểu collection khác nhau

như List, Set, Map.

• Implementations: Là các lớp collection có sẵn được cài đặt các collection interfaces.

• Algorithms: Là các phương thức tĩnh để

xử lý trên collection, ví dụ: sắp xếp danh sách, tìm phần tử lớn nhất

Trang 37

Giao tiếp Collection

• Cung cấp các thao tác chính trên collection như thêm/xoá/tìm phần tử Ví dụ:

• boolean add(Object element);

• boolean remove(Object element);

• boolean contains(Object element);

• int size();

• boolean isEmpty();

• Nếu lớp cài đặt Collection không muốn hỗ trợ các thao tác làm thay đổi collection như add, remove, clear nó có thể tung ra

ngoại lệ UnsupportedOperationException.

Trang 38

Giao tiếp List

• List kế thừa từ Collection, nó cung cấp thêm các phương thức để xử lý collection kiểu

danh sách (Danh sách là một collection với các phần tử được xếp theo chỉ số).

• Một số phương thức của List

• Object get(int index);

• Object set(int index, Object o);

• void add(int index, Object o);

• Object remove(int index);

• int indexOf(Object o);

Trang 39

Giao tiếp Set

• Set kế thừa từ Collection, hỗ trợ các thao

tác xử lý trên collection kiểu tập hợp (Một tập hợp yêu cầu các phần tử phải không

được trùng lặp).

• Set không có thêm phương thức riêng ngoài các phương thức kế thừa từ Collection.

Trang 40

Giao tiếp SortedSet

• SortedSet kế thừa từ Set, nó hỗ trợ thao tác trên tập hợp các phần tử có thể so sánh

được Các đối tượng đưa vào trong một

SortedSet phải cài đặt giao tiếp Comparable hoặc lớp cài đặt SortedSet phải nhận một

Comparator trên kiểu của đối tượng đó.

• Một số phương thức của SortedSet:

• Object first(); // lấy phần tử đầu tiên (nhỏ nhất)

• Object last(); // lấy phần tử cuối cùng (lớn nhất)

• SortedSet subSet(Object e1, Object e2); // lấy một

Trang 41

Duyệt collection

• Các phần tử trong collection có thể được

duyệt thông qua Iterator

• Các lớp cài đặt Collection cung cấp phương thức trả về iterator trên các phần tử của

chúng.

Collection c;

Iterator it = c.iterator();

Trang 42

System.out.println( p.toString() );

Trang 43

Giao tiếp Map

• Giao tiếp Map cung cấp các thao tác xử lý trên các bảng ánh xạ (Bảng ánh xạ lưu các phần tử theo khoá và không được có 2 khoá trùng nhau).

• Một số phương thức của Map

• Object put(Object key, Object value);

• Object get(Object key);

• Object remove(Object key);

• boolean containsKey(Object key);

• boolean containsValue(Object value);

Trang 44

Giao tiếp Map

Set entrySet(); // Trả về các cặp khoá-giá trị

collection, ta có thể dùng iterator để

Trang 45

Giao tiếp SortedMap

• Giao tiếp SortedMap kế thừa từ Map, nó

cung cấp thao tác trên các bảng ánh xạ với khoá có thể so sánh được.

• Giống như SortedSet, các đối tượng khoá

đưa vào trong SortedMap phải cài đặt giao tiếp Comparable hoặc lớp cài đặt SortedMap phải nhận một Comparator trên đối tượng khoá.

Trang 46

• Các cài đặt trong Collections Framework

chính là các lớp collection có sẵn trong Java Chúng cài đặt các collection interface ở trên

để thể hiện các cấu trúc dữ liệu cụ thể Ví

dụ: mảng động, danh sách liên kết, cây đỏ đen, bảng băm

Trang 48

Mô tả các cài đặt

• ArrayList: Mảng động, nếu các phần tử thêm vào vượt quá kích cỡ mảng, mảng sẽ tự

động tăng kích cỡ.

• LinkedList: Danh sách liên kết 2 chiều Hỗ

trợ thao tác trên đầu và cuối danh sách

• HashSet: Bảng băm.

• LinkedHashSet: Bảng băm kết hợp với

linked list nhằm đảm bảo thứ tự các phần

tử.

Trang 49

Mô tả các cài đặt

• HashMap: Bảng băm (cài đặt của Map).

• LinkedHashMap: Bảng băm kết hợp với

linked list nhằm đảm bảo thứ tự các phần tử (cài đặt của Map).

• TreeMap: Cây đỏ đen (cài đặt của Map).

Trang 50

SortedSet names = new TreeSet();

names.add(new String("Minh Tuan"));

names.add(new String("Hai Nam"));

names.add(new String("Anh Ngoc"));

names.add(new String("Trung Kien"));

names.add(new String("Quynh Chi"));

names.add(new String("Thu Hang"));

System.out.println(names);

Trang 51

Ví dụ 2: Student Set

class Student implements Comparable

{

private String code;

private double score;

public Student(String code, double score)

{

this.code = code;

this.score = score;

Trang 53

SortedSet stu = new TreeSet();

stu.add(new Student("A05726", 8.5));

stu.add(new Student("A06338", 7.0));

stu.add(new Student("A05379", 7.5));

stu.add(new Student("A06178", 9.5));

System.out.println(stu);

SortedSet sortByScore = new TreeSet(new Comparator()

// create an inner class

Trang 54

Ví dụ 2: Student Set

{

public int compare(Object a, Object b)

{

Student itemA = (Student) a;

Student itemB = (Student) b;

double scoreA = itemA.getScore();

double scoreB = itemB.getScore();

Trang 55

Map phoneDir = new HashMap();

phoneDir.put("5581814", new String("Dept Informatics")); phoneDir.put("8584490", new String("Defense Staff"));

phoneDir.put("8587346", new String("Administrative Staff")); phoneDir.put("7290028", new String("Student Club"));

// print all entries

System.out.println(phoneDir);

// remove an entry

Trang 56

// iterate through all entries

Set entries = phoneDir.entrySet();

Iterator iter = entries.iterator();

while (iter.hasNext())

{

Map.Entry entry = (Map.Entry) iter.next();

String key = (String) entry.getKey();

String value = (String) entry.getValue();

System.out.println("key=" + key + ", value=" + value);

}

Trang 57

Các lớp bao

• Collection chỉ làm việc trên các Object

Những kiểu dữ liệu cơ bản như: byte, short, int, long, double, float, char, boolean không thể đưa được trực tiếp vào Collection mà

phải thông qua các lớp bao

• Các lớp bao: Byte, Short, Int, Long, Double, Float, Char, Boolean.

• Ví dụ:

• Integer intObject = new Integer(9);

• int value = intObject.intValue();

Trang 58

phương thức tĩnh của lớp Collections

• static Object max(Collection c)

• static Object min(Collection c)

• static int binarySearch(List list, Object key)

• static void sort(List list)

• static void shuffle(List list)

• các phương thức tạo synchronized collection

Trang 59

List numbers = new ArrayList(52);

for (int i = 1; i <= 52; i++)

numbers.add(new Integer(i));

System.out.println("Before shuffling:" + numbers + "\n");

Collections.shuffle(numbers);

System.out.println("After shuffling:" + numbers + "\n");

}

}

Trang 60

Collections Framework

collection interface.

interface mà ta có thể kế thừa để tạo ra các collection mới

Trang 61

Bài tập

1 Cài đặt các xử lý Exception cần thiết cho các

phương thức trong LinkedList, Stack,

Queue, Tree.

2 Viết chương trình cho phép nhập một xâu ký

tự từ bàn phím, sau đó hiển thị xâu này

theo thứ tự ngược lại (dùng Stack).

3 Viết chương trình cho phép nhập một danh

sách sinh viên sau đó sắp xếp danh sách

theo thứ tự tăng dần Dùng ArrayList và

Collections.sort().

Trang 62

Bài tập

4 Viết chương trình hỗ trợ tra cứu từ điển

đơn giản Chương trình lưu các từ và

nghĩa của từ trong một Collection hoặc một Map.

để lưu trữ các từ.

6 Cài đặt lại Queue từ lớp ArrayList.

Cấu trúc dữ liệu bằng cách sử dụng

Ngày đăng: 22/08/2012, 11:06

HÌNH ẢNH LIÊN QUAN

• Bảng ánh xạ (Map) - Lập trình Java cơ bản
ng ánh xạ (Map) (Trang 2)
• Hastable: Bảng băm - Lập trình Java cơ bản
astable Bảng băm (Trang 33)
cung cấp thao tác trên các bảng ánh xạ với khoá có thể so sánh được. - Lập trình Java cơ bản
cung cấp thao tác trên các bảng ánh xạ với khoá có thể so sánh được (Trang 45)
• HashSet: Bảng băm. - Lập trình Java cơ bản
ash Set: Bảng băm (Trang 48)
• HashMap: Bảng băm (cài đặt của Map). - Lập trình Java cơ bản
ash Map: Bảng băm (cài đặt của Map) (Trang 49)

TỪ KHÓA LIÊN QUAN

w