Java - Khung bộ sưu tập
Trước Java 2, Java đã cung cấp các lớp đặc biệt như Dictionary, Vector, Stack, và Propertiesđể lưu trữ và thao tác các nhóm đối tượng. Mặc dù các lớp học này khá hữu ích, nhưng chúng thiếu một chủ đề thống nhất, tập trung. Do đó, cách bạn sử dụng Vector khác với cách bạn sử dụng Thuộc tính.
Khung bộ sưu tập được thiết kế để đáp ứng một số mục tiêu, chẳng hạn như -
Khung phải có hiệu suất cao. Việc triển khai cho các tập hợp cơ bản (mảng động, danh sách liên kết, cây và bảng băm) phải có hiệu quả cao.
Khung công tác phải cho phép các loại tập hợp khác nhau hoạt động theo cách tương tự và có khả năng tương tác cao.
Khuôn khổ phải mở rộng và / hoặc điều chỉnh một bộ sưu tập một cách dễ dàng.
Hướng tới mục tiêu này, toàn bộ khuôn khổ bộ sưu tập được thiết kế xung quanh một tập hợp các giao diện tiêu chuẩn. Một số triển khai tiêu chuẩn nhưLinkedList, HashSet, và TreeSet, trong số các giao diện này được cung cấp để bạn có thể sử dụng nguyên trạng và bạn cũng có thể triển khai bộ sưu tập của riêng mình, nếu bạn chọn.
Khung bộ sưu tập là một kiến trúc thống nhất để đại diện và thao tác các bộ sưu tập. Tất cả các khung bộ sưu tập chứa những điều sau:
Interfaces- Đây là các kiểu dữ liệu trừu tượng đại diện cho các tập hợp. Các giao diện cho phép các tập hợp được thao tác độc lập với các chi tiết của biểu diễn của chúng. Trong ngôn ngữ hướng đối tượng, các giao diện thường tạo thành một hệ thống phân cấp.
Implementations, i.e., Classes- Đây là những triển khai cụ thể của các giao diện bộ sưu tập. Về bản chất, chúng là cấu trúc dữ liệu có thể tái sử dụng.
Algorithms- Đây là các phương thức thực hiện các tính toán hữu ích, chẳng hạn như tìm kiếm và sắp xếp, trên các đối tượng thực hiện giao diện thu thập. Các thuật toán được cho là đa hình: có nghĩa là, cùng một phương pháp có thể được sử dụng trên nhiều triển khai khác nhau của giao diện thu thập thích hợp.
Ngoài các bộ sưu tập, khuôn khổ xác định một số giao diện và lớp bản đồ. Bản đồ lưu trữ các cặp khóa / giá trị. Mặc dù bản đồ không phải là bộ sưu tập trong cách sử dụng thuật ngữ thích hợp, nhưng chúng được tích hợp đầy đủ với các bộ sưu tập.
Giao diện Bộ sưu tập
Khung tập hợp xác định một số giao diện. Phần này cung cấp tổng quan về từng giao diện -
Sr.No. | Giao diện & Mô tả |
---|---|
1 | Giao diện Bộ sưu tập Điều này cho phép bạn làm việc với các nhóm đối tượng; nó nằm trên cùng của hệ thống phân cấp bộ sưu tập. |
2 | Giao diện danh sách Điều này kéo dài Collection và một thể hiện của Danh sách lưu trữ một tập hợp các phần tử có thứ tự. |
3 | Bộ Điều này mở rộng Bộ sưu tập để xử lý các tập hợp phải chứa các phần tử duy nhất. |
4 | SortedSet Điều này mở rộng Set để xử lý các tập hợp đã sắp xếp. |
5 | Bản đô Điều này ánh xạ các khóa duy nhất cho các giá trị. |
6 | Bản đồ.Entry Điều này mô tả một phần tử (một cặp khóa / giá trị) trong bản đồ. Đây là một lớp bên trong của Bản đồ. |
7 | Bản đồ sắp xếp Điều này mở rộng Bản đồ để các khóa được duy trì theo thứ tự tăng dần. |
số 8 | Bảng kê Đây là giao diện kế thừa xác định các phương thức mà bạn có thể liệt kê (lấy từng phần tử một) các phần tử trong một tập hợp các đối tượng. Giao diện kế thừa này đã được thay thế bởi Iterator. |
Các lớp bộ sưu tập
Java cung cấp một tập hợp các lớp bộ sưu tập tiêu chuẩn triển khai các giao diện Bộ sưu tập. Một số lớp cung cấp các triển khai đầy đủ có thể được sử dụng nguyên trạng và những lớp khác là lớp trừu tượng, cung cấp các triển khai bộ xương được sử dụng làm điểm khởi đầu để tạo các tập hợp cụ thể.
Các lớp tập hợp tiêu chuẩn được tóm tắt trong bảng sau:
Sr.No. | Lớp & Mô tả |
---|---|
1 | AbstractCollection Triển khai hầu hết giao diện Bộ sưu tập. |
2 | AbstractList Mở rộng AbstractCollection và triển khai hầu hết giao diện Danh sách. |
3 | AbstractSequentialList Mở rộng danh sách AbstractList để sử dụng bởi một tập hợp sử dụng truy cập tuần tự chứ không phải ngẫu nhiên vào các phần tử của nó. |
4 | LinkedList Triển khai một danh sách được liên kết bằng cách mở rộng AbstractSequentialList. |
5 | Lập danh sách Triển khai một mảng động bằng cách mở rộng AbstractList. |
6 | AbstractSet Mở rộng AbstractCollection và triển khai hầu hết giao diện Set. |
7 | HashSet Mở rộng AbstractSet để sử dụng với bảng băm. |
số 8 | LinkedHashSet Mở rộng HashSet để cho phép lặp lại thứ tự chèn. |
9 | TreeSet Triển khai một tập hợp được lưu trữ trong một cây. Mở rộng AbstractSet. |
10 | AbstractMap Triển khai hầu hết giao diện Bản đồ. |
11 | Bản đồ băm Mở rộng AbstractMap để sử dụng bảng băm. |
12 | TreeMap Mở rộng Bản đồ trừu tượng để sử dụng một cây. |
13 | WeakHashMap Mở rộng AbstractMap để sử dụng một bảng băm với các khóa yếu. |
14 | LinkedHashMap Mở rộng HashMap để cho phép lặp lại thứ tự chèn. |
15 | IdentityHashMap Mở rộng Bản đồ trừu tượng và sử dụng bình đẳng tham chiếu khi so sánh các tài liệu. |
Các lớp AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList và AbstractMap cung cấp các triển khai cơ bản của các giao diện bộ sưu tập cốt lõi, để giảm thiểu nỗ lực cần thiết để triển khai chúng.
Các lớp kế thừa sau do java.util định nghĩa đã được thảo luận trong chương trước:
Sr.No. | Lớp & Mô tả |
---|---|
1 | Véc tơ Điều này thực hiện một mảng động. Nó tương tự như ArrayList, nhưng có một số khác biệt. |
2 | Cây rơm Stack là một lớp con của Vector thực hiện một ngăn xếp tiêu chuẩn nhập trước, xuất trước. |
3 | Từ điển Từ điển là một lớp trừu tượng đại diện cho một kho lưu trữ khóa / giá trị và hoạt động giống như Bản đồ. |
4 | Hashtable Hashtable là một phần của java.util ban đầu và là một triển khai cụ thể của Từ điển. |
5 | Tính chất Thuộc tính là một lớp con của Hashtable. Nó được sử dụng để duy trì danh sách các giá trị trong đó khóa là một Chuỗi và giá trị cũng là một Chuỗi. |
6 | BitSet Một lớp BitSet tạo ra một kiểu mảng đặc biệt chứa các giá trị bit. Mảng này có thể tăng kích thước khi cần thiết. |
Thuật toán thu thập
Khung tập hợp xác định một số thuật toán có thể được áp dụng cho tập hợp và bản đồ. Các thuật toán này được định nghĩa là các phương thức tĩnh trong lớp Collections.
Một số phương pháp có thể ném ClassCastException, xảy ra khi cố gắng so sánh các loại không tương thích hoặc UnsupportedOperationException, xảy ra khi cố gắng sửa đổi một tập hợp không thể sửa đổi.
Bộ sưu tập xác định ba biến tĩnh: EMPTY_SET, EMPTY_LIST và EMPTY_MAP. Tất cả đều là bất biến.
Sr.No. | Thuật toán & Mô tả |
---|---|
1 | Thuật toán thu thập Đây là danh sách tất cả các thực thi thuật toán. |
Làm thế nào để sử dụng một lặp lại?
Thông thường, bạn sẽ muốn duyệt qua các phần tử trong một bộ sưu tập. Ví dụ: bạn có thể muốn hiển thị từng phần tử.
Cách dễ nhất để làm điều này là sử dụng một trình vòng lặp, là một đối tượng thực thi giao diện Trình lặp lại hoặc ListIterator.
Iterator cho phép bạn xoay vòng qua một tập hợp, lấy hoặc xóa các phần tử. ListIterator mở rộng Iterator để cho phép duyệt hai chiều danh sách và sửa đổi các phần tử.
Sr.No. | Mô tả và Phương pháp lặp lại |
---|---|
1 | Sử dụng Java Iterator Đây là danh sách tất cả các phương thức với các ví dụ được cung cấp bởi giao diện Iterator và ListIterator. |
Làm thế nào để sử dụng một so sánh?
Cả TreeSet và TreeMap đều lưu trữ các phần tử theo thứ tự được sắp xếp. Tuy nhiên, nó là bộ so sánh xác định chính xác thứ tự đã sắp xếp có nghĩa là gì.
Giao diện này cho phép chúng tôi sắp xếp một bộ sưu tập nhất định theo nhiều cách khác nhau. Ngoài ra, giao diện này có thể được sử dụng để sắp xếp bất kỳ trường hợp nào của bất kỳ lớp nào (ngay cả các lớp chúng tôi không thể sửa đổi).
Sr.No. | Mô tả và Phương pháp lặp lại |
---|---|
1 | Sử dụng trình so sánh Java Đây là danh sách tất cả các phương pháp với các ví dụ được cung cấp bởi Giao diện so sánh. |
Tóm lược
Khung công tác tập hợp Java cho phép lập trình viên truy cập vào các cấu trúc dữ liệu đóng gói sẵn cũng như các thuật toán để thao tác chúng.
Bộ sưu tập là một đối tượng có thể chứa các tham chiếu đến các đối tượng khác. Các giao diện bộ sưu tập khai báo các hoạt động có thể được thực hiện trên mỗi loại bộ sưu tập.
Các lớp và giao diện của khung công tác tập hợp nằm trong gói java.util.