Thông tin tài liệu:
Khung cộng tác của các sưu tập Java (Java Collections Framework) là rộng lớn. Có rất nhiều lớp và giao diện trong khungcộng tác. Tại đây, chúng ta sẽ trình bày nhiều hơn, dù không phải là tất cả về chúng.
Nội dung trích xuất từ tài liệu:
Tìm hiểu Java Collections Frameworkìm hiểu Java Collections Framework Trả lời Liên hệKhung cộng tác của các sưu tập Java (Java Collections Framework) là rộng lớn. Có r ất nhi ều l ớp và giao di ện trong khungcộng tác. Tại đây, chúng ta sẽ trình bày nhiều hơn, dù không phải là tất cả về chúng.Các giao diện và các lớp sưu tậpKhung công tác của các sưu tập Java dựa trên triển khai thực hiện cụ thể một số giao di ện định nghĩa các ki ểu sưu tập(collection): Giao diện List định nghĩa một sưu tập các phần tử Object có thể dẫn hướng. • Giao diện Set định nghĩa một sưu tập không có các phần tử trùng lặp. • Giao diện Map định nghĩa một sưu tập các cặp khóa - giá trị. •Chúng ta sẽ nói về một vài triển khai thực hiện cụ thể trong hướng dẫn này. Đây không phải là một danh sách đầy đ ủ,nhưng nhiều khả năng bạn thường xuyên thấy những thứ sau đây trong các dự án phát triển bằng ngôn ngữ Java:Giao diện Các triển khai thực hiệnList ArrayList, VectorSet HashSet, TreeSetMap HashMapTất cả các giao diện trong khung cộng tác, trừ Map là các giao di ện con của giao di ện Collection, trong đó đ ịnh nghĩa c ấutrúc chung nhất của một sưu tập. Mỗi sưu tập gồm nhiều phần tử. Với vai trò là trình thực hi ện các giao di ện con c ủaCollection, tất cả kiểu sưu tập chia sẻ chung (theo trực giác) một số hành vi: Các phương thức để mô tả kích thước của sưu tập (như size() và isEmpty()). • Các phương thức để mô tả nội dung của sưu tập (như contains() và containsAll()). • Các phương thức để hỗ trợ thao tác về nội dung của sưu tập (như add(), remove() và clear()). • Các phương thức để cho phép bạn chuyển đổi một sưu tập thành một mảng (như toArray()). • Một phương thức để cho phép bạn nhận được một trình vòng lặp (iterator) trên mảng các phần tử (iterator()). •Chúng ta sẽ nói về một số phương thức trên trong phần này. Đồng thời chúng ta sẽ thảo luận trình vòng l ặp (iterator) là gìvà cách sử dụng nó như thế nào.Lưu ý rằng các Map là đặc biệt. Thật sự chúng hoàn toàn không là một sưu tập. Tuy nhiên, chúng có hành vi r ất gi ống cácsưu tập, vì vậy chúng ta cũng nói về chúng trong phần này.Các triển khai thực hiện Danh sách (List)Các phiên bản cũ hơn của JDK chứa một lớp được gọi là Vector. Nó vẫn còn có trong các phiên bản mới hơn, nhưng bạnchỉ nên sử dụng nó khi bạn cần có một sưu tập đồng bộ hoá -- đó là, một trong những yếu tố là an toàn phân luồng. (Nóivề phân luồng đã vượt ra ngoài phạm vi của bài viết này, chúng ta sẽ thảo luận ngắn gọn về khái ni ệm ấy trong ph ầnTóm tắt). Trong các trường hợp khác, bạn nên sử dụng lớp ArrayList. Bạn vẫn có thể sử dụng Vector, nhưng nó áp đặtmột số chi phí thêm mà bạn thường không cần.Một ArrayList là cái như tên của nó gợi ý: danh sách các phần tử theo thứ tự. Chúng ta đã thấy làm thế nào đ ể tạo ra mộtdanh sách và làm thế nào để thêm các phần tử vào nó, trong bài hướng dẫn gi ới thi ệu trước. Khi chúng ta tạo ra một l ớpWallet lồng trong trong hướng dẫn này, chúng ta đã tích hợp vào đó một ArrayList để giữ các hoá đơn thanh toán củaAdult:Phương thức getMoneyTotal() sử dụng một trình vòng lặp (iterator) để duyệt qua danh sách các hoá đ ơn thanh toán và tínhtổng giá trị của chúng. Một Iterator tương tự như một Enumeration trong các phiên bản cũ hơn của ngôn ngữ Java. Khi b ạnnhận được một trình vòng lặp trên sưu tập (bằng cách gọi iterator()), trình vòng l ặp cho phép bạn duyệt qua (traverse) toànbộ sưu tập bằng cách sử dụng một số phương thức quan trọng, được minh họa trong mã lệnh ở trên:hasNext() cho bạn biết còn có một phần tử tiếp theo khác trong sưu tập không.next() cho bạn phần tử tiếp theo đó.Như chúng ta đã thảo luận ở trên, bạn phải ép kiểu đúng khi bạn trích ra các phần tử từ sưu tập khi sử dụng next().Tuy nhiên, Iterator còn cho chúng ta một số khả năng bổ sung thêm. Chúng ta có thể loại bỏ các ph ần t ử kh ỏi l ớp ArrayListbằng cách gọi remove() (hay removeAll(), hay clear()), nhưng chúng ta cũng có thể sử dụng Iterator đ ể làm đi ều đó. Hãythêm một phương thức rất đơn giản được gọi là spendMoney() tới Adult:Phương thức này gọi removeBill() trên Wallet:Chúng ta nhận được một Iterator trên các hoá đơn thanh toán ArrayList, và duyệt qua danh sách đ ể tìm một k ết quả kh ớpvới giá trị hóa đơn được chuyển qua (aBill). Nếu chúng ta tìm thấy một kết quả khớp, chúng ta gọi remove() trên trìnhvòng lặp để loại bỏ hóa đơn đó. Cũng đơn giản, nhưng còn chưa phải là đơn giản hết mức. Mã dưới đây thực hi ện cùngmột công việc và dễ đọc hơn nhiều:Có thể bạn sẽ không thường xuyên gọi remove() trên một Iterator nhưng sẽ rất tốt nếu có công cụ đó khi bạn cần nó.Lúc này, chúng ta có thể loại bỏ chỉ một hóa đơn riêng lẻ mỗi ...