Giới thiệu

Gần như mọi chương trình đều cần lưu trữ một số bộ dữ liệu. Nó có thể là chuỗi và số, đối tượng, v.v. Mảng là một giải pháp lưu trữ tuyệt vời. Nhưng mảng có những hạn chế nhất định. Ví dụ: kích thước của chúng là cố định, không thể xóa các phần tử và bạn không thể chèn các phần tử vào giữa. Các bộ sưu tập đã được tạo ra để khắc phục những hạn chế này và các hạn chế khác. Tất cả các loại bộ sưu tập (và có rất nhiều trong số chúng, như chúng ta sẽ thấy sau trong bài học này) đều có khả năng tự động thay đổi kích thước. Một số loại bộ sưu tập có thể lưu trữ các phần tử được sắp xếp theo thứ tự và tự động sắp xếp các phần tử mới theo thứ tự khi chúng được thêm vào.

Trong bài học này, chúng ta sẽ làm quen với hệ thống phân cấp lớp của các bộ sưu tập cơ sở trong Java Collections Framework . Ngoài ra còn có nhiều thư viện thay thế khác mở rộng khả năng của Java Collections Framework tiêu chuẩn . Phổ biến nhất trong số này là Guava (Thư viện bộ sưu tập của Google).

*Không phải tất cả các giao diện và lớp đều được biểu diễn trong sơ đồ. Một số đã được lược bỏ để dễ hiểu hơn.

giao diện cơ bản

Sơ đồ cho thấy có hai giao diện cơ bản được triển khai để tạo thành phần còn lại của các lớp và giao diện.

Chúng ta hãy xem các giao diện này:

  1. Bộ sưu tập — Một bộ sưu tập thông thường chứa một tập hợp các phần tử (đối tượng). Bộ sưu tập này có các phương thức cơ bản để làm việc với các phần tử: chèn ( add , addAll ), xóa ( remove , removeAll , clear ), tìm kiếm ( contains , containsAll ), kiểm tra xem bộ sưu tập có trống không ( isEmpty ) và lấy kích thước ( size ).

  2. Bản đồ — Một bộ sưu tập được cấu trúc dưới dạng các cặp khóa-giá trị. Hơn nữa, mỗi khóa trong Bản đồ là duy nhất: không có hai khóa nào có giá trị giống hệt nhau. Bộ sưu tập này đôi khi được gọi là từ điển . Bản đồ là một giao diện riêng biệt. Nó không triển khai giao diện Bộ sưu tập , nhưng là một phần của Khung bộ sưu tập Java .

Các phương pháp hữu ích để làm việc với các thành phần trong Bản đồ :

  • chèn ( đặt , đặt tất cả )

  • lấy ( get , keySet , các giá trị , entrySet )

  • loại bỏ ( loại bỏ , xóa )

  • tìm kiếm ( chứaKey , chứaValue )

  • kiểm tra xem bộ sưu tập có trống không ( isEmpty )

  • lấy kích thước ( size )

Bây giờ hãy nói nhiều hơn về từng người trong số họ.

Giao diện bộ sưu tập

Giao diện Bộ sưu tập mở rộng giao diện Iterable , có một phương thức duy nhất: iterator() . Đối với chúng tôi, điều này có nghĩa là bất kỳ bộ sưu tập nào kế thừa Iterable sẽ có thể trả về một trình vòng lặp.

Trình vòng lặp là một đối tượng đặc biệt mà bạn có thể sử dụng để truy cập các phần tử của bất kỳ bộ sưu tập nào, bất kể cách triển khai cụ thể của nó.

Hình này cho thấy 3 giao diện kế thừa giao diện Bộ sưu tập : List , QueueSet . Bây giờ chúng ta sẽ xem xét từng cái một cách ngắn gọn.

Danh sách là một bộ sưu tập được sắp xếp cho phép các giá trị trùng lặp. Một tính năng cụ thể của Danh sách là các phần tử của nó được đánh số và có thể được truy cập theo số (chỉ mục).

Hàng đợi lưu trữ các phần tử theo thứ tự chúng được thêm vào hàng đợi.

Không giống như một danh sách, Set đại diện cho một bộ sưu tập không có thứ tự không cho phép các phần tử lặp lại. Giao diện Set tương ứng với khái niệm về một tập hợp toán học .

Triển khai giao diện Bản đồ

Chúng ta có thể thấy rằng giao diện Bản đồ biểu thị ánh xạ giữa các khóa và giá trị duy nhất.


interface Map<K, V>

trong đó K là loại khóa và V là loại giá trị được lưu trữ.

Sử dụng khóa, chúng tôi có thể trích xuất dữ liệu từ Bản đồ . Để thêm một phần tử vào Bản đồ , chúng ta phải chỉ định một khóa và một giá trị.

Hãy xem xét một số triển khai của Map :

  1. HashMap là một triển khai của Map dựa trên các bảng băm. Nó có thể lưu trữ các khóa và giá trị thuộc bất kỳ loại nào, kể cả null . Thứ tự của các phần tử không được đảm bảo.

  2. LinkedHashMap là một cấu trúc dữ liệu lưu trữ dữ liệu dưới dạng danh sách các phần tử được liên kết. Các phần tử xuất hiện trong danh sách theo thứ tự mà chúng được thêm vào.

  3. TreeMap triển khai giao diện SortedMap (thông qua giao diện NavigableMap ). Các phần tử trong cấu trúc này được lưu trữ theo thứ tự đã sắp xếp (khi một phần tử mới được thêm vào, bộ sưu tập sẽ được sắp xếp tự động). TreeMap là tuyệt vời để lưu trữ một lượng lớn dữ liệu được sắp xếp với tốc độ truy xuất nhanh.

Bộ sưu tập lỗi thời:

Java có các bộ sưu tập lỗi thời từ các phiên bản trước (để duy trì khả năng tương thích ngược). Những bộ sưu tập cũ này không nên được sử dụng trong mã mới:

  • Liệt kê - tương tự như giao diện Iterator ;

  • Vector - một danh sách các phần tử được sắp xếp theo thứ tự và tương tự như lớp ArrayList ;

  • Ngăn xếp — triển khai cấu trúc dữ liệu ngăn xếp, lưu trữ và thao tác các phần tử giống như cách bạn tương tác với một chồng sách. Có các phương pháp để thêm các phần tử vào ngăn xếp ( push ) và loại bỏ chúng ( pop );

  • Từ điển — tương tự như giao diện Bản đồ , nhưng nó là một lớp trừu tượng;

  • Hashtable — tương tự như HashMap .

Bạn có thể đọc thêm về Collections Framework trong bài viết này .