Hầu hết các ngôn ngữ lập trình sử dụng mảng để lưu trữ một tập hợp dữ liệu cùng loại. Một nhược điểm lớn của mảng là, một khi kích thước mảng được khai báo, nó không thể được sửa đổi. Nếu lập trình viên muốn lưu trữ một giá trị vượt quá kích thước mảng, thì anh ta nên tạo một mảng mới và sao chép các phần tử hiện có sang mảng mới. Trong những tình huống này, bộ sưu tập có thể được sử dụng. Có thể thêm các yếu tố, xóa các yếu tố và nhiều hoạt động khác với sự hỗ trợ của các bộ sưu tập. Có nhiều loại bộ sưu tập khác nhau có sẵn trong các ngôn ngữ lập trình như Java. List và Set là các giao diện của hệ thống phân cấp bộ sưu tập. Giao diện cơ sở cho các giao diện khác là Bộ sưu tập. Các sự khác biệt chính giữa Danh sách và Tập hợp là Danh sách hỗ trợ lưu trữ cùng một phần tử nhiều lần trong khi Set không hỗ trợ lưu trữ cùng một phần tử nhiều lần. Do đó, Bộ không cho phép sao chép.
1. Tổng quan và sự khác biệt chính
2. Danh sách là gì
3. Đặt là gì
4. Điểm tương đồng giữa Danh sách và Tập hợp
5. So sánh cạnh nhau - Danh sách so với Đặt ở dạng bảng
6. Tóm tắt
Danh sách này là một giao diện mở rộng giao diện Bộ sưu tập. Có một số phương thức trong giao diện Collection. Phương thức add giúp thêm một phần tử. 'Phương thức loại bỏ' là loại bỏ một phần tử. Có 'phương thức addAll' để thêm nhiều phần tử trong khi 'phương thức remove ALL' để xóa các phần tử khỏi bộ sưu tập. Phương thức chứa giúp tìm xem một đối tượng cụ thể có trong Danh sách hay không. 'Chứa tất cả' là để tìm xem một tập hợp các đối tượng có trong bộ sưu tập hay không. Phương thức lặp được sử dụng để lặp qua các mục của danh sách. Khi Danh sách mở rộng Bộ sưu tập, tất cả các phương thức của Bộ sưu tập thuộc về Danh sách. Khác với các phương thức đó, Danh sách có các phương thức như get và set. Lập trình viên có thể nhận được một giá trị tại một chỉ mục cụ thể bằng cách sử dụng phương thức get. Lập trình viên có thể đặt giá trị tại một chỉ mục cụ thể bằng phương thức đặt. 'IndexOf' được sử dụng để tìm chỉ mục của một phần tử.
Trong một Danh sách, các hoạt động có thể được thực hiện theo vị trí. Lập trình viên có thể cung cấp phần tử dữ liệu sẽ được thêm vào chỉ mục. Vì vậy, nó sẽ được thêm vào chỉ số cụ thể. Nếu lập trình viên không đưa ra một chỉ mục, phần tử sẽ được thêm vào cuối Danh sách. Nó cũng duy trì thứ tự chèn. Nếu phần tử 1 được thêm vào và sau đó phần tử 2 được thêm vào, thì phần tử 1 sẽ ở trước phần tử2.
Hình 01: Danh sách và bộ
ArrayList, LinkedList, Vector là một số lớp thực hiện List. Trong một ArrayList, truy cập một phần tử là nhanh nhưng chèn và xóa thấp hơn. ArrayList không an toàn cho chuỗi. Truy cập cùng một ArrayList từ nhiều luồng có thể không cho kết quả giống nhau. Trong LinkedList, các phần tử được liên kết với cả lùi và tiến. Chèn và xóa các phần tử bằng LinkedList nhanh hơn ArrayList. LinkedList thực hiện Danh sách và Hàng đợi Cả. Vector tương tự như ArrayList, nhưng nó an toàn vì tất cả các phương thức được đồng bộ hóa.
Set là giao diện mở rộng giao diện Collection. Khi giao diện Set mở rộng Bộ sưu tập, tất cả các phương thức của Bộ sưu tập cũng thuộc về Bộ. Một bộ không hỗ trợ các giá trị trùng lặp. Do đó, lập trình viên không thể lưu trữ cùng một phần tử hai lần. Nó duy trì một tập hợp các yếu tố độc đáo. Giao diện Sắp xếp mở rộng giao diện Set. Sắp xếp duy trì các yếu tố theo thứ tự sắp xếp. Giao diện NavigableSet mở rộng Sắp xếp Sắp xếp. Bộ điều hướng cung cấp các phương thức điều hướng như thấp hơn, sàn, trần, v.v..
Hashset, LinkedHashset và Treeset là một số lớp thực hiện giao diện Set. Các Hashset thực hiện Đặt giao diện. Nó không duy trì thứ tự chèn. Nếu các giá trị được chèn dưới dạng a, x, b, nó có thể lưu dưới dạng, x, a, b. Các LinkedIn duy trì thứ tự chèn Nếu các phần tử được chèn theo thứ tự a, x, b, thứ tự lưu trữ sẽ là a, x, b. Các Cây Set thực hiện Set và Navigableset. Nó không duy trì thứ tự chèn mà lưu trữ các phần tử theo thứ tự được sắp xếp. Nếu thứ tự chèn là a, c, b, thì các phần tử sẽ được lưu dưới dạng a, b, c. Tất cả Hashset, LinkedHashset và Treeset sẽ không có bất kỳ yếu tố trùng lặp nào.
Danh sách vs Bộ | |
Giao diện danh sách là giao diện phụ của Bộ sưu tập chứa các phương thức để thực hiện các thao tác như chèn, xóa dựa trên chỉ mục. | Đặt Giao diện là giao diện phụ của Bộ sưu tập chứa các phương thức để thực hiện các thao tác như chèn, xóa các thành phần trong khi duy trì các thành phần duy nhất. |
Các lớp học | |
ArrayList, Vector và LinkedList là các lớp thực hiện giao diện List. | Hashset, LinkedHashset và Treeset là các lớp thực hiện giao diện Set. |
Sao chép phần tử | |
Danh sách hỗ trợ sao chép các phần tử. | Đặt không hỗ trợ sao chép các phần tử. Các yếu tố là duy nhất. |
Bộ sưu tập được sử dụng để lưu trữ các yếu tố động. Các ngôn ngữ lập trình như Java cung cấp giao diện Collection. List và Set là hai giao diện thuộc về giao diện Collection. Cả hai giao diện mở rộng Bộ sưu tập. Bài viết này thảo luận về sự khác biệt giữa Danh sách và Tập hợp. Sự khác biệt chính giữa Danh sách và Tập hợp là Danh sách hỗ trợ lưu trữ cùng một phần tử nhiều lần trong khi Bộ không hỗ trợ lưu trữ cùng một phần tử nhiều lần. Đặt luôn duy trì các yếu tố độc đáo.
1. Điểm, Hướng dẫn. Bộ sưu tập Java Java., Điểm hướng dẫn, ngày 8 tháng 1 năm 2018. Có sẵn tại đây