Bài giảng Cấu trúc dữ liệu: Chương 4 - Nguyễn Xuân Vinh
lượt xem 7
download
Bài giảng Cấu trúc dữ liệu - Chương 4: Iterator - Comparable - Comparator trình bày về java conllection architecture, examining sets and maps, iterator methods, iterator example, comparable, comparator,...Mời bạn đọc cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu: Chương 4 - Nguyễn Xuân Vinh
- GV: NGUYỄN XUÂN VINH CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] Iterator - Comparable - Comparator MÔN: CẤU TRÚC DỮ LIỆU Nguyễn Xuân Vinh 6/12/14 nguyenxuanvinh@hcmuaf.ed u.vn /XX 1
- 2 /XX 6/12/14 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Java Collection Architecture
- List GV: NGUYỄN XUÂN VINH The Differences!!! index 0 1 2 3 4 5 6 7 8 9 • How to browse element? value 3 8 9 7 5 12 0 0 0 0 – Elements of List are indexed. Linked List int value = list[0]; – Elements of LinkedList, Sets and MÔN: CẤU TRÚC DỮ LIỆU Maps can't be accessed by "the" index Set "to" "we" • How to remove element? "from" Map 6/12/14 /XX 3
- GV: NGUYỄN XUÂN VINH Examining sets and maps • elements of Java Sets and Maps can't be accessed by index – must use a "foreach" loop: Set scores = new HashSet(); for (int score : scores) { MÔN: CẤU TRÚC DỮ LIỆU System.out.println("The score is " + score); } – Problem: foreach is read-only; cannot modify set while looping for (int score : scores) { if (score
- GV: NGUYỄN XUÂN VINH Iterators (11.1) • iterator: An object that allows a client to traverse the elements of any collection, regardless of its implementation. – Remembers a position within a collection, and allows you to: • get the element at that position • advance to the next position MÔN: CẤU TRÚC DỮ LIỆU • (possibly) remove or change the element at that position – Benefit: A common way to examine any collection's elements. list inde 0 1 2 3 4 5 6 7 8 9 "the" set x "to" "we" "from" 6/12/14 valu 3 8 9 7 5 12 0 0 0 0 e current element: 9 current element: "from" /XX iterator iterator size current index: 6 2 next element:"the" 5
- GV: NGUYỄN XUÂN VINH Iterator methods hasNext() returns true if there are more elements to examine next() returns the next element from the collection (throws a NoSuchElementException if there are none left to examine) MÔN: CẤU TRÚC DỮ LIỆU remove() removes from the collection the last value returned by next() (throws IllegalStateException if you have not called next() yet) • Iterator interface in java.util – every collection has an iterator() method that returns an iterator over its elements 6/12/14 Set set = new HashSet(); /XX ... 6
- GV: NGUYỄN XUÂN VINH Iterator example Set scores = new HashSet(); scores.add(38); scores.add(94); scores.add(87); scores.add(43); scores.add(62); ... MÔN: CẤU TRÚC DỮ LIỆU Iterator itr = scores.iterator(); while (itr.hasNext()) { int score = itr.next(); System.out.println("The score is " + score); // eliminate any failing grades if (score < 60) { itr.remove(); 6/12/14 } } System.out.println(scores); // [62, 94, 87] /XX 7
- GV: NGUYỄN XUÂN VINH Iterator example 2 Map scores = new HashMap(); scores.put("Kim", 38); scores.put("Lisa", 94); scores.put("Ryan", 87); scores.put("Morgan", 43); scores.put("Marisa", 62); ... MÔN: CẤU TRÚC DỮ LIỆU Iterator itr = scores.keySet().iterator(); while (itr.hasNext()) { String name = itr.next(); int score = scores.get(name); System.out.println(name + " got " + score); // eliminate any failing students if (score < 60) { itr.remove(); // removes name and score 6/12/14 } } /XX System.out.println(scores);// {Marisa=62, Lisa=94, Ryan=87} 8
- GV: NGUYỄN XUÂN VINH Exercise • Modify the Book Search program from last lecture to eliminate any words that are plural or all-uppercase from the collection. MÔN: CẤU TRÚC DỮ LIỆU 6/12/14 /XX 9
- GV: NGUYỄN XUÂN VINH Set/Map and ordering • Some types have a notion of a natural ordering . – TreeSet/Map store values sorted by their natural ordering. Set scores = new HashSet(); scores.add(38); scores.add(94); MÔN: CẤU TRÚC DỮ LIỆU scores.add(87); scores.add(43); // unpredictable order scores.add(62); System.out.println(scores); // [62, 94, 43, 87, 38] Set scores = new TreeSet(); scores.add(38); scores.add(94); scores.add(87); 6/12/14 scores.add(43); // sorted natural order scores.add(62); System.out.println(scores); // [38, 43, 62, 87, 94] /XX 10
- GV: NGUYỄN XUÂN VINH Ordering our own types • We cannot make a TreeSet or TreeMap of any arbitrary type, because Java doesn't know how to order the elements. – The program compiles but crashes when we run it. Set tags = new TreeSet(); MÔN: CẤU TRÚC DỮ LIỆU tags.add(new HtmlTag("body", true)); tags.add(new HtmlTag("b", false)); ... Exception in thread "main" java.lang.ClassCastException at java.util.TreeMap.put(TreeMap.java:542) 6/12/14 at java.util.TreeSet.add(TreeSet.java:238) at MyProgram.main(MyProgram.java:24) /XX 11
- GV: NGUYỄN XUÂN VINH Comparable (10.2) public interface Comparable { public int compareTo(E other); } • A class can implement the Comparable interface to define a natural ordering function for its objects. MÔN: CẤU TRÚC DỮ LIỆU • A call of a.compareTo(b) should return: a value < 0 if a comes "before" b in the ordering, a value > 0 if a comes "after" b in the ordering, or 0 if a and b are considered "equal" in the ordering. 6/12/14 /XX 12
- GV: NGUYỄN XUÂN VINH Comparable example public class Point implements Comparable { private int x; private int y; ... // sort by x and break ties by y public int compareTo(Point other) { MÔN: CẤU TRÚC DỮ LIỆU if (x < other.x) { return -1; } else if (x > other.x) { return 1; } else if (y < other.y) { return -1; // same x, smaller y } else if (y > other.y) { return 1; // same x, larger y } else { 6/12/14 return 0; // same x and same y } } /XX } 13
- GV: NGUYỄN XUÂN VINH compareTo tricks • subtraction trick - Subtracting related numeric values produces the right result for what you want compareTo to return: // sort by x and break ties by y public int compareTo(Point other) { MÔN: CẤU TRÚC DỮ LIỆU if (x != other.x) { return x - other.x; // different x } else { return y - other.y; // same x; compare y } } 6/12/14 /XX – The idea: • if x > other.x, then x - other.x > 0 14
- GV: NGUYỄN XUÂN VINH compareTo tricks 2 • delegation trick - If your object's fields are comparable (such as strings), use their compareTo results to help you: // sort by employee name, e.g. "Jim" < "Susan" public int compareTo(Employee other) { MÔN: CẤU TRÚC DỮ LIỆU return name.compareTo(other.getName()); } • toString trick - If your object's toString representation is related to the ordering, use that to help you: 6/12/14 // sort by date, e.g. "09/19" > "04/01" /XX public int compareTo(Date other) { 15
- GV: NGUYỄN XUÂN VINH Comparable and sorting • The Arrays and Collections classes in java.util have a static method sort that sorts the elements of an array/list Point[] points = new Point[3]; points[0] = new Point(7, 6); MÔN: CẤU TRÚC DỮ LIỆU points[1] = new Point(10, 2) points[2] = new Point(7, -1); points[3] = new Point(3, 11); Arrays.sort(points); System.out.println(Arrays.toString(points)); // (3, 11), (7, -1), (7, 6), (10, 2) 6/12/14 /XX List points = new ArrayList(); points.add(new Point(7, 6)); 16
- GV: NGUYỄN XUÂN VINH Arrays class Method name Description asList(value1, ..., valueN) returns a List containing the given values as its elements MÔN: CẤU TRÚC DỮ LIỆU binarySearch(array, value) returns the index of the given value in a sorted array (
- GV: NGUYỄN XUÂN VINH Collections class Method name Description binarySearch(list, value) returns the index of the given value in a sorted list (
- GV: NGUYỄN XUÂN VINH Comparable basics • Ordering is done through the compareTo() method. MÔN: CẤU TRÚC DỮ LIỆU 6/12/14 /XX 19
- 20 /XX 6/12/14 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH System-Defined Comparable classes
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 174 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 79 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 57 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 158 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn