Collection trong Java
Java cung cấp các class đặt biệt như Dictionary, Vector, Stack và Properties để lưu trữ và thao tác với một nhóm các đối tượng. Mặc dù những class này khá hữu dụng, nhưng lại thiếu sự tập trung, thống nhất. Do đó, cách sử dụng Vector trong Java khác với cách sử dụng Properties.
Để hiểu sâu hơn các khái niệm được trình bày trong chương này, mời bạn tham khảo loạt bài: Ví dụ về Collection trong Java.
Collection framework được thiết kế với mục đích như sau:
Framework phải là hiệu năng cao. Sự triển khai cho các tập hợp cơ bản (các mảng động, linked list, tree và hashtable) được sử dụng với hiệu quả cao.
Framework phải cho phép các kiểu tập hợp khác nhau để làm việc theo một cách tương tự như nhau với độ phân hóa ở mức cao.
Kế thừa và/hoặc tìm hiểu với các tập hợp phải là dễ dàng.
Đến cuối cùng, toàn bộ collection framework này được thiết kế xung quanh một tập hợp các interface tiêu chuẩn. Vài class triển khai như LinkedList, HashSet và TreeSet của những interface này được cung cấp cho bạn có thể triển khai tập hợp nếu bạn chọn.
Một collections framework là một cấu trúc thống nhất để biểu diễn và thao tác các collection. Tất cả collections framework đều chứa:
Interface: Đây là các kiểu dữ liệu abstract mà biểu diễn collection. Interface cho phép collection được thao tác một cách độc lập theo phép biểu diễn của chúng. Trong ngôn ngữ hướng đối tượng, các interface nói chung cấu tạo nên một hierarchy.
Sự triển khai, ví dụ như các Class Đây là sự triển khai cụ thể của collection interface. Về bản chất, chúng là những cấu trúc dữ liệu có thể tái sử dụng.
Thuật toán: Đây là các phương thức thực hiện các trình tính toán hữu ích, như tìm kiếm và xếp thứ tự phân loại, trên các đối tượng mà triển khai collection interface. Các thuật toán được xem như là đa hình: đó là, cùng một phương thức có thể được sử dụng trên nhiều sự triển khai khác nhau của collection interface thích hợp.
Ngoài ra, framework định nghĩa một số map interfaces và class. Map lưu giữ các cặp key/value. Mặc dù các map không là collections về khái niệm, nhưng chúng hoàn toàn tương thích với collection.
Collection Interface trong Java
Một Collection framework định nghĩa trước vài loại interface. Phần này cung cấp cho bạn tổng quan về mỗi interface:
STT | Interface và Miêu tả |
---|---|
1 | Collection Interface trong Java Cho phép bạn có thể làm việc với các nhóm đối tượng, nó là phần interface cha của tất cả các collection interface khác |
2 |
Kế thừa từ Collection và một kiểu List lưu trữ tập hợp các phần tử một cách có thứ tự |
3 |
Nó kế thừa Collection để thao tác với tập hợp, mà phải chứa các phần tử duy nhất |
4 | SortedSet Interface trong Java Kế thừa từ Set để thao tác với tập hợp được xếp thứ tự |
5 |
Liên kết giữa key duy nhất tới các value |
6 | Map.Entry Interface trong Java Mô tả một thành phần key/value trong map. Là một inner class của Map |
7 | SortedMap Interface trong Java Kế thừa từ Map để mà các key được duy trì một cách có thứ tự |
8 | Enumeration Interface trong Java Đây là một legacy interface và định nghĩa phương thức, theo đó bạn có thể liệt kê các thành phần của một tập hợp trong một tập hợp các đối tượng. |
Các lớp Collection trong Java
Java cung cấp một tập hợp các lớp collection tiêu chuẩn có thể triển khai các Collection interface.
Bảng dưới đây tổng hợp các lớp collection chuẩn trong Java:
STT | Các lớp và miêu tả |
---|---|
1 | Lớp AbstractCollection trong Java
Triển khai tất cả các Collection interface |
2 | Lớp AbstractList trong Java
Kế thừa AbtractCollection và triển khai tất cả phương thức List interface |
3 | Lớp AbstractSequentialList trong Java
Kế thừa AbstractList để sử dụng bởi một Collection mà sử dụng liên tục thay vì truy cập ngẫu nhiên các phần tử của nó |
4 |
Triển khai một LinkedList bởi kế thừa AbstractSequentialList |
5 |
Triển khai một mảng động bởi kế thừa AbstractList |
6 | Lớp AbstractSet trong Java
Kế thừa AbstractCollection và triển khai hầu hết Set interface |
7 |
Kế thừa AbstractSet để sử dụng với một hash table |
8 |
Kế thừa HashSet để cho phép lặp lại thứ tự chèn (insertion-order) |
9 |
Triển khai một tập hợp được lưu trong một tree. Kế thừa AbstractSet |
10 | Lớp AbstractMap trong Java
Triển khai hầu hết Map interface |
11 |
Kế thừa AbstractMap để sử dụng một hash table |
12 |
Kế thừa AbstractMap để sử dụng một tree |
13 | Lớp WeakHashMap trong Java Kế thừa AbstractMap để sử dụng một hash table với các khóa weak |
14 | Lớp LinkedHashMap trong Java Kế thừa HashMap để cho phép lặp lại thứ tự chèn (insertion-order) |
15 | Lớp IdentityHashMap trong Java Kế thừa AbstractMap và sử dụng tham chiếu ngang bằng khi so sánh các tài liệu |
Các lớp AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList và AbstractMap trong Java cung cấp sự triển khai xương sống của các Collection Interface lõi, để tối thiểu hóa nỗ lực cần để thi hành chúng.
Các legacy class sau được định nghĩa bởi java.util, đã được bàn luận trong chương trước:
STT | Các lớp và Miêu tả |
---|---|
1 |
Lớp này triển khai một mảng động. Nó tương tự như ArrayList, nhưng có một số điểm khác nhau |
2 |
Stack là lớp phụ của lớp Vector mà triển khai last-in-first-out stack |
3 |
Dictionary là một abstract class mà biểu diễn một kho lưu giữ key/value và hoạt động khá giống Map |
4 |
Hashtable là một phần của java.util gốc và là một sự triển khai cụ thể của một Dictionary |
5 |
Properties là một lớp phụ của Hashtable. Nó được sử dụng để duy trì các danh sách giá trị trong đó key là một String và value cũng là một String |
6 |
Một lớp BitSet tạo một kiểu mảng đặc biệt mà giữ các giá trị bit. Mảng này có thể tăng kích cỡ nếu cần |
Các thuật toán Collection trong Java
Collection Framework định nghĩa một số thuật toán có thể được áp dụng cho các Collection và Map. Những thuật toán này được định nghĩa như là các phương thức tĩnh (static) bên trong lớp Collection.
Một số phương thức có thể ném một ClassCastException, mà xảy ra khi cố gắng so sánh các kiểu không tương thích, hoặc một UnsupportedOperationException, mà xảy ra khi cố gắng sửa đổi một Unmodifiable Collectioon.
Các Collection định nghĩa 3 biến static là: EMPTY_SET, EMPTY_LIST, và EMPTY_MAP. Tất cả là không thể thay đổi.
STT | Thuật toán và Miêu tả |
---|---|
1 | Thuật toán Collection trong Java Đây là danh sách tất cả các thuật toán. |
Cách sử dụng một Iterator trong Java
Thường thì, bạn sẽ muốn tuần hoàn qua các phần tử trong một tập hợp. Ví dụ, có thể bạn muốn hiển thị mỗi phần tử.
Cách đơn giản nhất để thực hiện điều này là thuê một Iterator, là một đối tượng mà triển khai hoặc Iterator hoặc Listlerator interface.
Iterator cho bạn khả năng để tuần hoàn qua một tập hợp, kiếm được và gỡ bỏ các phần tử. ListIterator kế thừa Iterator để cho phép "vọc" song hướng một danh sách và sửa đổi các phần tử.
STT | Các phương thức Iterator và miêu tả |
---|---|
1 |
Đây là danh sách tất cả phương thức và ví dụ về Iterator và ListIterator interface. |
Cách sử dụng một Comparator trong Java
Cả TreeSet và TreeMap đều lưu giữ các phần tử trong thứ tự đã được xếp thứ tự. Tuy nhiên, nó là comparator mà định nghĩa chính xác ý nghĩa của sorted order.
Interface này giúp chúng ta xếp thứ tự một tập hợp với bất kỳ số lượng mảng nào đã cho. Ngoài ra, interface này cũng có thể được sử dụng để xếp thứ tự bất kỳ instance nào của bất kỳ lớp nào (ngay cả các lớp chúng ta không thể chỉnh sửa).
STT | Phương thức Comparator và Miêu tả |
---|---|
1 |
Đây là danh sách tất cả các phương thức và ví dụ về Comparator Interface. |
Tổng kết
Collection Framework trong Java cung cấp cho lập trình viên truy cập tới các cấu trúc dữ liệu đã đóng gói trước (Prepackage) cũng như các thuật toán để thao tác chúng.
Một Collection là một đối tượng mà có thể giữ các tham chiếu tới các đối tượng khác. Collection Interface khai báo các hoạt động mà có thể được thực hiện trên mỗi kiểu Collection.
Các Class và Interface của Collection Framework là trong gói java.util.
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập doanh nghiệp với Java. Khóa học có giá chỉ 400K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.
Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp chị Thu, trợ lý anh Tuyền để hỗ trợ thanh toán qua mã QR ngân hàng Việt Nam, fb: https://www.facebook.com/Thule.59
Anh Tuyền, tác giả khóa học, là cựu sinh viên chương trình đào tạo kĩ sư tài năng của đại học Bách Khoa Hà Nội với hơn 5 năm kinh nghiệm đi làm thực tế doanh nghiệp và cũng là Founder website vietjack.com, web giáo dục phổ biến nhất Việt Nam hiện tại (năm 2024). Java cũng là ngôn ngữ lập trình dễ đi xin việc nhất hiện tại, với mức lương cao, hãy nâng cao kiến thức IT của bản thân mình vì một Việt Nam giàu mạnh.
Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com
Bài học Java phổ biến tại vietjack.com: