Lập trình Java cơ bản
Trang 1Lậ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 5Linked 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 6Linked 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 8Cài đặt Linked List
// Dinh nghia lop LinkedList
public class LinkedList
{
private ListNode firstNode;
private ListNode lastNode;
public LinkedList()
Trang 9Cài đặt Linked List
public void insertAtBack( int insertItem )
else
firstNode = firstNode.nextNode;
Trang 10Cà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 11Cà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 12Mô tả insertAtFront
firstNode
12 new ListNode
(a)
firstNode
12 new ListNode
(b)
Trang 1412
Trang 15Mô 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 18public 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 24Binary 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 25Binary Search Tree
• Ví dụ về Binary Search Tree
Trang 26Cà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 27Cài đặt Binary Search Tree
public class Tree
Trang 28Cài đặt Binary Search Tree
public void inorderTraversal()
Trang 29Cài đặt Binary Search Tree
private void inorder( TreeNode node )
Trang 30Sử dụng Binary Search Tree
public class TreeTest
for ( int i = 1; i <= 10; i++ ) {
value = ( int ) ( Math.random() * 100 );
Trang 31Bà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 34Collections 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 35Collections 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 37Giao 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 38Giao 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 39Giao 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 40Giao 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 41Duyệ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 42System.out.println( p.toString() );
Trang 43Giao 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 44Giao tiếp Map
Set entrySet(); // Trả về các cặp khoá-giá trị
collection, ta có thể dùng iterator để
Trang 45Giao 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 48Mô 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 49Mô 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 50SortedSet 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 51Ví 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 53SortedSet 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 54Ví 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 55Map 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 57Cá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 58phươ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 59List 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 60Collections Framework
collection interface.
interface mà ta có thể kế thừa để tạo ra các collection mới
Trang 61Bà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 62Bà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