Bài giảng Lập trình Java nâng cao - Collection - Nguyễn Hữu Thể

pdf 19 trang Gia Huy 17/05/2022 3170
Bạn đang xem tài liệu "Bài giảng Lập trình Java nâng cao - Collection - Nguyễn Hữu Thể", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_java_nang_cao_collection_nguyen_huu_the.pdf

Nội dung text: Bài giảng Lập trình Java nâng cao - Collection - Nguyễn Hữu Thể

  1. LẬP TRÌNH JAVA NÂNG CAO Collection Nguyễn Hữu Thể 1
  2. Collection − Collection là một đối tượng mà nó nhóm các đối tượng khác thành phần tử và cung cấp các phương thức cơ bản để thêm, xóa, lấy, duyệt các phần tử ▪ Phần tử của Collection không được phép là kiểu nguyên thủy − Collections Framework thống nhất cách thức sử dụng các collection, gồm 3 thành phần chính: ▪ Interface ▪ Lớp triển khai ▪ Thuật toán − Sử dụng đối tượng Iterator để duyệt qua tất cả các phần tử của collection. − Ưu điểm: tiện dụng, hiệu năng cao 2
  3. Hệ thống cấp bậc Collection 3
  4. Collection − Iterable interface ▪ Chứa dữ liệu thành viên Iterator interface − Iterator interface ▪ Cung cấp phương tiện để lặp đi lặp lại các thành phần từ đầu đến cuối của một collection. − Các phương thức của Iterator interface Phương thức Mô tả public boolean Trả về true nếu iterator còn phần tử kế tiếp phần tử đang hasNext() duyệt. public object next() Trả về phần tử hiện tại và di chuyển con trỏ trỏ tới phần tử tiếp theo. public void remove() Loại bỏ phần tử cuối được trả về bởi Iterator. Nó hiếm khi được sử dụng. 4
  5. Các phương thức của Interface Collection Phương thức Mô tả public boolean add(Object element) Chèn một phần tử vào collection. public boolean addAll(Collection c) Chèn các phần tử collection được chỉ định vào collection gọi phương thức này. public boolean remove(Object element) Xóa phần tử từ collection. public boolean removeAll(Collection c) Xóa tất cả các phần tử của collection được chỉ định từ collection gọi phương thức này. public boolean retainAll(Collection c) Xóa tất cả các thành phần từ collection public int size() Trả lại tổng số các phần tử trong collection. public void clear() Loại bỏ tổng số của phần tử khỏi collection. public boolean contains(Object element) Tìm kiếm phần tử. public boolean containsAll(Collection c) Tìm kiếm collection được chỉ định trong collection. public Iterator iterator() Trả về một iterator. public Object[] toArray() Chuyển đổi collection thành mảng (array). public boolean isEmpty() Kiểm tra nếu collection trống. public boolean equals(Object element) So sánh 2 collection. public int hashCode() Trả về số hashcode của collection. 5
  6. import java.util.ArrayList; import java.util.LinkedList; import java.util.List;Các phương thức của Interface Collection public class CollectionExample { public static void main(String[] args) { List arrayList = new ArrayList (); arrayList.add("Python"); arrayList.add("Java"); arrayList.add("C++"); System.out.println("Các phần tử của ArrayList: " + arrayList); List linkedList = new LinkedList (); linkedList.add("Python"); linkedList.add("Java"); linkedList.add("C++"); System.out.println("Các phần tử của LinkedList: " + linkedList); } } Các phần tử của ArrayList: [Python, Java, C++] Các phần tử của LinkedList: [Python, Java, C++] 6
  7. import java.util.HashMap; import java.util.HashSet; import java.util.Map;Các phương thức của Interface Collection import java.util.Set; public class CollectionExample { public static void main(String[] args) { // new TreeSet() sẽ sắp xếp các phần tử Set hashSet = new HashSet (); hashSet.add("Python"); hashSet.add("Java"); hashSet.add("Java"); hashSet.add("C++"); System.out.println("Các phần tử của Set: " + hashSet); // new TreeMap() sẽ sắp xếp các phần tử dựa vào key của chúng Map hashMap = new HashMap (); hashMap.put("Language2", "Java"); hashMap.put("Language1", ".Net"); System.out.println("Các phần tử của Map: " + hashMap); } Các phần tử của Set: [Java, C++, Python] } 7 Các phần tử của Map: {Language1=.Net, Language2=Java}
  8. ArrayList − Lớp ArrayList: mảng động. ▪ Kế thừa lớp AbstractList và implements interface List. ▪ ArrayList có thể chứa các phần tử trùng lặp. ▪ ArrayList duy trì thứ tự của phần tử được thêm vào. ▪ ArrayList là không đồng bộ (non-synchronized). ▪ ArrayList cho phép truy cập ngẫu nhiên vì nó lưu dữ liệu theo chỉ mục. 8
  9. ArrayList - constructor Constructor Mô tả ArrayList() Khởi tạo một danh sách mảng trống. ArrayList(Collection c) Xây dựng một danh sách mảng được khởi tạo với các phần tử của collection c. ArrayList(int capacity) Xây dựng một danh sách mảng mà có dung lượng ban đầu được chỉ định. 9
  10. ArrayList - phương thức Phương thức Mô tả boolean add(Object o) Nối thêm phần tử được chỉ định vào cuối một danh sách. void add(int index, Object element) Chèn các phần tử được chỉ định tại các chỉ số vị trí boolean addAll(Collection c) Nối tất cả các phần tử trong collection được chỉ định vào cuối của danh sách này, theo thứ tự chúng được trả về bởi bộ lặp iterator. boolean addAll(int index, Collection Chèn tất cả các phần tử trong collection được chỉ định vào danh sách c) này, bắt đầu từ vị trí đã chỉ định. void retainAll(Collection c) Xóa những phần tử không thuộc collection c và không thuộc list hiện tại void removeAll(Collection c) Xóa những phần tử thuộc collection c và thuộc list hiện tại khỏi list hiện tại. int indexOf(Object o) Trả về chỉ mục trong danh sách với sự xuất hiện đầu tiên của phần tử được chỉ định, hoặc -1 nếu danh sách không chứa phần tử này. int lastIndexOf(Object o) Trả về chỉ mục trong danh sách với sự xuất hiện cuối cùng của phần tử được chỉ định, hoặc -1 nếu danh sách không chứa phần tử này. Object[] toArray() Trả về một mảng chứa tất cả các phần tử trong danh sách theo thứ tự. Object[] toArray(Object[] a) Trả về một mảng chứa tất cả các phần tử trong danh sách theo thứ tự. Object clone() Trả về một bản sao của ArrayList. void clear() Xóa tất cả các phần tử từ danh sách này. void trimToSize() Cắt dung lượng của ArrayList là kích thước danh sách hiện tại. 10
  11. Ví dụ: ArrayList có kiểu generic là String import java.util.ArrayList; import java.util.Iterator; public class ArrayListExample1 { public static void main(String args[]) { ArrayList list = new ArrayList (); list.add("Java"); list.add("C++"); list.add("PHP"); // Show list through Iterator Iterator itr = list.iterator(); while (itr.hasNext()) { System.out.print(itr.next() + ", "); } // Show list through for-each System.out.println(); for (String obj : list) { System.out.print(obj + ", "); } // Show list through index System.out.println(); int size = list.size(); Output: for (int i = 0; i < size; i++) { Java, C++, PHP, System.out.print(list.get(i) + ", "); Java, C++, PHP, } Java, C++, PHP, } 11 }
  12. VD: ArrayList có kiểu generic là đối tượng do người dùng định nghĩa class Student { import java.util.ArrayList; private String name; public class ArrayListExample3 { private int age; public static void main(String[] args) { public Student(String name, int age) { // Create listStudent super(); ArrayList listStudent = new this.name = name; ArrayList (); this.age = age; // Create students } Student student1 = new Student("A", 18); @Override Student student2 = new Student("B", 20); public String toString() { Student student3 = new Student("C", 19); return "Student@[name=" + // Add objects to listStudent name + ", age=" + age + "]"; listStudent.add(student1); } listStudent.add(student2); } listStudent.add(student3); // Show listStudent for (Student student : listStudent) { System.out.println(student.toString() ); } Output: } Student@[name=A, age=18] } Student@[name=B, age=20] Student@[name=C, age=19] 12
  13. VD: addAll(), removeAll(), retainAll() import java.util.ArrayList; public static void public class ArrayListExample4 { public static void main(String[] args) { showList(ArrayList list) { ArrayList list = new for (String obj : list) { ArrayList (); System.out.print("\t" + obj + ", "); list.add("Java"); } list.add("C++"); System.out.println(); list.add("Python"); } // addAll() } ArrayList listA = new ArrayList (); listA.addAll(list); System.out.print("listA:"); showList(listA); // retainAll() listA ArrayList listB = new ArrayList (); listB.add("Java"); listA.retainAll(listB); Output: System.out.print("listA:"); showList(listA); listA:Java, C++, Python, listA:Java, // removeAll() listA listA:C++, Python, list.removeAll(listA); System.out.print("listA:"); showList(list); 13 }
  14. LinkedList − Lớp LinkedList sử dụng cấu trúc danh sách liên kết Doubly (Doubly Linked List) để lưu trữ các phần tử. ▪ LinkedList có thể chứa các phần tử trùng lặp. ▪ LinkedList duy trì thứ tự của phần tử được thêm vào. ▪ LinkedList là không đồng bộ (non-synchronized). ▪ Lớp LinkList, thao tác nhanh vì không cần phải dịch chuyển nếu bất kỳ phần tử nào bị xoá khỏi danh sách. ▪ Lớp ArrayList có thể được sử dụng như list (danh sách), stack (ngăn xếp) hoặc queue (hàng đợi). 14
  15. LinkedList - constructor Constructor Mô tả LinkedList() Xây dựng một danh sách trống. LinkedList(Collection c) Xây dựng một danh sách chứa các phần tử của collection được chỉ định, theo thứ tự chúng được trả về bởi iterator của collection. 15
  16. LinkedList - constructor Phương thức Mô tả boolean add(Object o) Nối thêm phần tử được chỉ định vào cuối một danh sách. void add(int index, Object element) Chèn các phần tử được chỉ định tại các chỉ số vị trí quy định trong một danh sách. void addFirst(Object o) Chèn phần tử được chỉ định vào đầu danh sách. void addLast(Object o) Chèn phần tử được chỉ định vào cuối danh sách. int size() Trả lại số lượng các phần tử trong một danh sách boolean contains(Object o) Trả về true nếu danh sách có chứa một phần tử được chỉ định. boolean remove(Object o) Xóa phần tử được chỉ định đầu tiên trong một danh sách. Object getFirst() Trả về phần tử đầu tiên trong một danh sách. Object getLast() Trả lại phần tử cuối cùng trong một danh sách. int indexOf(Object o) Trả về chỉ mục trong một danh sách với sự xuất hiện đầu tiên của phần tử được chỉ định, hoặc -1 nếu danh sách không chứa bất kỳ phần tử nào. int lastIndexOf(Object o) Trả lại chỉ mục trong danh sách với sự xuất hiện cuối cùng của phần tử được chỉ định, hoặc -1 nếu danh sách không chứa bất kỳ phần tử nào. 16
  17. LinkedList - constructor import java.util.Iterator; import java.util.LinkedList; // add first linkedList.addFirst("Python"); public class LinkedListExample1 { public static void main(String[] args) { // Show list through for-each LinkedList linkedList = new System.out.println(); LinkedList (); for (String obj : linkedList) { System.out.print(obj + ", "); linkedList.add("Java"); } linkedList.add("C++"); // add last linkedList.add("PHP"); linkedList.addLast("Ruby"); linkedList.add("Java"); // Show list through index // Show list through Iterator System.out.println(); Iterator itr = int size = linkedList.size(); linkedList.iterator(); for (int i = 0; i < size; i++) { while (itr.hasNext()) { System.out.print(linkedList.get(i) + ", "); } System.out.print(itr.next() + ", "); } } } Output: Java, C++, PHP, Java, Python, Java, C++, PHP, Java, Python, Java, C++, PHP, Java, Ruby, 17
  18. ArrayList và LinkedList − Giống nhau: implements từ List, duy trì thứ tự, non-synchronized − Khác nhau: ArrayList LinkedList 1) ArrayList nội bộ sử dụng mảng động để LinkedList nội bộ sử dụng danh sách liên lưu trữ các phần tử. kết doubly để lưu trữ các phần tử. 2) Thao tác với ArrayList là chậm bởi vì nó Thao tác với LinkedList là nhanh hơn so với sử dụng nội bộ mảng. Nếu bất kỳ phần tử nào ArrayList bởi vì nó sử dụng danh sách liên được xoá khỏi mảng, tất cả các bit được kết doubly do đó không cần chuyển đổi bit chuyển trong bộ nhớ. nào trong bộ nhớ. 3) Lớp ArrayListchỉ có thể hoạt động như Lớp LinkedList có thể hoạt động như một một list vì nó chỉ implements interface List. list và queue(hàng đợi) vì nó implements các interface List và Deque. 4) ArrayList là tốt hơn trong việc lưu trữ và LinkedList là tốt hơn trong việc thao tác dữ truy cập dữ liệu. liệu. 18
  19. TÀI LIỆU THAM KHẢO − www.tutorialspoint.com/java − viettuts/java-collection 19