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

Bài giảng Lập trình Java: Bài 10 - Bùi Trọng Tùng

42 1 0

Đ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

Định dạng
Số trang 42
Dung lượng 644,33 KB

Nội dung

Bài 10 - Collections framework. Những nội dung chính trong bài giảng gồm có: Giới thiệu chung về collection, các giao diện trong collections framework, list và iterator, tìm kiếm và sắp xếp trên list. Mời các bạn cùng tham khảo.

BÀI 10 COLLECTIONS FRAMEWORK Nội dung • Giới thiệu chung • Các giao diện Collections framework • List Iterator • Tìm kiếm xếp List GIỚI THIỆU CHUNG VỀ COLLECTION Collection gì? • Collection đối tượng mà nhóm đối tượng khác thành phần tử cung cấp phương thức để thêm, xóa, lấy, duyệt phần tử… • Phần tử Collection khơng phép kiểu nguyên thủy • Collections Framwork thống cách thức sử dụng collection, gồm thành phần chính: • Giao diện • Lớp triển khai • Thuật tốn • Sử dụng đối tượng Iterator để duyệt qua tất phần tử collection • Được xây dựng dựa kỹ thuật lập trình tổng qt • Ưu điểm: tiện dụng, hiệu cao Các giao diện lớp triển khai Một ví dụ đơn giản import java.util.List; import java.util.ArrayList; import java.util.Iterator; public class ArrayListPostJDK15Test { public static void main(String[] args) { List list = new ArrayList(); list.add("alpha"); // add an element list.add("beta"); list.add("charlie"); System.out.println(list); // [alpha, beta, charlie] Một ví dụ đơn giản(tiếp) // Iterator of Strings Iterator iter = list.iterator(); while (iter.hasNext()) { String str = iter.next(); System.out.println(str); } for (String str : list) { System.out.println(str); } } } CÁC GIAO DIỆN COLLECTION Các giao diện Các giao diện (tiếp) • Giao diện Iterable //Trả lại đối tượng Iterator để duyệt qua phần tử Iterator iterator() • Giao diện Iterator // Trả vể true phần tử chưa duyệt boolean hasNext() // Trả phần tử collection E next() // Xóa phần tử duyệt void remove() 10 Sắp xếp với Comparable • Lớp triển khai định nghĩa phương thức int compareTo(E obj) trả về: • đối tượng so sánh obj • Nhỏ nhỏ đối tượng so sánh • Lớn lớn đối tượng so sánh • Khi định nghĩa compareTo() cần thống với kết trả equals(): • Nếu compareTo() trả 0, equals() nên trả true • Các lớp bao lớp String lớp triển khai từ Comparable 28 Comparable – Ví dụ public class Student implements Comparable{ private String id; private String name; private int level; @Override public int compareTo(Student o) { return this.id.compareToIgnoreCase(o.getID()); } //Declare other methods } 29 Comparable – Ví dụ public class StudentSortDemo{ Student[] arr = new Student[50]; List list = new ArrayList(); //enter data for arr and list //sort arr Arrays.sort(arr); //sort list Collections.sort(list); //Display results } Làm để xếp theo nhiều tiêu chí? 30 Sắp xếp với Comparator • Định nghĩa so sánh triển khai từ Comparator, định nghĩa phương thức int compare(E o1, E o2) trả về: • o1 == o2 • Nhỏ o1o2 • Khơng bắt buộc lớp phần tử phải kế thừa từ giao diện Comparable • Tiện dụng • Mềm dẻo hơn: viết nhiều so sánh theo tiêu chí khác • Cung cấp phương thức thenComparing() để so sánh đồng thời theo tiêu chí khác 31 Comparator – Ví dụ public class Student{ private String id; private String name; private int level; //Declare methods } 32 Comparator – Ví dụ public class StudentSortDemo{ Student[] arr = new Student[50]; List list = new ArrayList(); public static class StudentComparator implements Comparator{ @Override public int compare(Student s1, Student s2){ return s1.getName().compareToIgnoreCase(s2.getName()); } } Comparator compStudent = new StudentComparator(); //sort arr Arrays.sort(arr, compStudent); //sort list Collections.sort(list, compStudent); //Display results } 33 So sánh đồng thời nhiều tiêu chí public static class StudentComparatorByName implements Comparator{ @Override public int compare(Student s1, Student s2){ return s1.getName().compareToIgnoreCase(s2.getName()); } } public static class StudentComparatorByLevel implements Comparator{ @Override public int compare(Student s1, Student s2){ return s1.getLevel()- s2.getLevel(); } } Comparator c = (new StudentComparatorByLevel()).thenComparing( new StudentComparatorByName()); 34 So sánh đồng thời nhiều tiêu chí • Từ Java cho phép tạo so sánh cách đơn giản public static class StudentComparators { public static final Comparator NAME = (Student s1, Student s2) -> s1.getName().compareToIgnoreCase(s2.getName()); public static final Comparator LEVEL = (Student s1, Student s2) -> Integer.compare(s1.getLevel(), s2.getLevel()); public static final Comparator NAME_THEN_LEVEL = (Student s1, Student s2) -> NAME.thenComparing(LEVEL).compare(s1, s2); } Arrays.sort(arr, StudentComparators.NAME_THEN_LEVEL); Collections.sort(list, StudentComparators.NAME_THEN_LEVEL); 35 Tìm kiếm • Tìm kiếm • Mảng: duyệt so sánh • Collection: boolean contains(Object o) • List: • int indexOf(Object o) • int lastIndexOf(Object o) • Tìm kiếm nhị phân: thực mảng, collection xếp Sử dụng phương thức tĩnh lớp Arrays Collections • Trả số phần tử tìm thấy • Trả -1 khơng tìm thấy 36 Tìm kiếm nhị phân – Ví dụ • Lớp phần tử triển khai từ Comparable • Arrays.binarySearch(Object[] arr, Object key) • Arrays.binarySearch(Object[], int from, int to, Object key) • Collections.binarySearch(List, E key) • Sử dụng so sánh triển khai từ Comparator • Arrays.binarySearch(E[], E key, Comparator c) • Arrays.binarySearch(E[], int from, int to, E key, Comparator c) • Collections.binarySearch(List, E key, Comparator c) 37 Tìm kiếm nhị phân – Ví dụ public class Student implements Comparable{ private String id; private String name; private int level; @Override public int compareTo(Student o) { return this.id.compareToIgnoreCase(o.id); } //Declare other methods } 38 Tìm kiếm nhị phân – Ví dụ(tiếp) public class StudentSortDemo{ Student[] arr = new Student[50]; List list = new ArrayList(); Arrays.sort(arr); Student student = new Student(“20123456”); System.out.println(“Found this student at” + Arrays.binarySearch(arr, student)); Collections.sort(list); System.out.println(“Found this student at” + Collections.binarySearch(list, student)); } 39 Tìm kiếm nhị phân – Ví dụ khác public class Student{ private String id; private String name; private int level; //Declare methods } 40 Tìm kiếm nhị phân – Ví dụ khác public class StudentSortDemo{ Student[] arr = new Student[50]; List list = new ArrayList(); public static class StudentComparator implements Comparator{ @Override public int compare(Student s1, Student s2){ return s1.id.compareToIgnoreCase(s2.id); } } Comparator compStudent = new StudentComparator(); Arrays.sort(arr, compStudent); Student student = new Student(“20123456”); System.out.println(“Found this student at” + Arrays.binarySearch(arr, student, compStudent)); Collections.sort(list, compStudent); System.out.println(“Found this student at” + Collections.binarySearch(list, student, compStudent)); } 41 Tài liệu tham khảo • Bài giảng soạn thảo dựa tài liệu trường Đại học NTU (Singapore) 42 ... • Sử dụng đối tượng Iterator để duyệt qua tất phần tử collection • Được xây dựng dựa kỹ thuật lập trình tổng qt • Ưu điểm: tiện dụng, hiệu cao Các giao diện lớp triển khai Một ví dụ đơn giản import... Comparator NAME = (Student s1, Student s2) -> s1.getName().compareToIgnoreCase(s2.getName()); public static final Comparator LEVEL = (Student s1, Student s2) -> Integer.compare(s1.getLevel(),... student at” + Collections.binarySearch(list, student, compStudent)); } 41 Tài liệu tham khảo • Bài giảng soạn thảo dựa tài liệu trường Đại học NTU (Singapore) 42

Ngày đăng: 08/05/2021, 14:23