So sánh list và set java năm 2024

Collection Interface định nghĩa những phương thức cơ bản khi làm việc với tập hợp, đây là gốc cũng là nền móng để từ đó xây dựng lên cả bộ thư viện Java Collection Framework. Collection Interface được kế thừa từ Iterable Interface nên các bạn có thể dễ dàng duyệt qua từng phần tử thông qua việc sử dụng Iterator.

3. Set Interface

Set (tập hợp) là kiểu dữ liệu mà bên trong nó mỗi phần tử chỉ xuất hiện duy nhất một lần (tương tự như tập hợp trong toán học vậy) và Set Interface cung cấp các phương thức để tương tác với set. Set Interface được kế thừa từ Collection Interface nên nó cũng có đầy đủ các phương thức của Collection Interface. Một số class thực thi Set Interface thường gặp:

  • TreeSet: là 1 class thực thi giao diện Set Interface, trong đó các phần tử trong set đã được sắp xếp.
  • HashSet: là 1 class implement Set Interface, mà các phần tử được lưu trữ dưới dạng bảng băm (hash table).
  • EnumSet: là 1 class dạng set như 2 class ở trên, tuy nhiên khác với 2 class trên là các phần tử trong set là các enum chứ không phải object.

4. List Interface

List (danh sách) là cấu trúc dữ liệu tuyến tính trong đó các phần tử được sắp xếp theo một thứ tự xác định. List Interface định nghĩa các phương thức để tương tác với list cũng như các phần tử bên trong list. Tương tự như Set Interface, List Interface cũng được kế thừa và có đầy đủ các phương thức của Collection Interface.

Một số class thực thi List Interface thường sử dụng:

  • ArrayList: là 1 class dạng list được implement dựa trên mảng có kích thước thay đổi được.
  • LinkedList: là một class dạng list hoạt động trên cơ sở của cấu trúc dữ liệu danh sách liên kết đôi (double-linked list)
  • Vector: là 1 class thực thi giao diện List Interface, có cách thực lưu trữ như mảng tuy nhiên có kích thước thay đổi được, khá là tương tự với ArrayList, tuy nhiên điểm khác biệt là Vector là synchronized, hay là đồng bộ, có thể hoạt động đa luồng mà không cần gọi synchronize một cách tường minh
  • Stack: cũng là 1 class dạng list, Stack có cách hoạt động dựa trên cơ sở của cấu trúc dữ liệu ngăn xếp (stack) với kiểu vào ra LIFO (last-in-first-out hay vào sau ra trước) nổi tiếng.

5. Queue Interface

Queue (hàng đợi) là kiểu dữ liệu nổi tiếng với kiểu vào ra FIFO (first-in-first-out hay vào trước ra trước), tuy nhiên với Queue Interface thì queue không chỉ còn dừng lại ở mức đơn giản như vậy mà nó cũng cấp cho bạn các phương thức để xây dựng các queue phức tạp hơn nhiều như priority queue (queue có ưu tiên), deque (queue 2 chiều), … Và cũng giống như 2 interface trước, Queue Interface cũng kế thừa và mang đầy đủ phương thức từ Collection Interface. Một số class về Queue thường sử dụng:

  • LinkedList: chính là LinkedList mình đã nói ở phần List
  • PriorityQueue: là 1 dạng queue mà trong đó các phần tử trong queue sẽ được sắp xếp.
  • ArrayDeque: là 1 dạng deque (queue 2 chiều) được implement dựa trên mảng

6. Map Interface

Map (đồ thị/ánh xạ) là kiểu dữ liệu cho phép ta quản lý dữ liệu theo dạng cặp key-value, trong đó key là duy nhất và tương ứng với 1 key là một giá trị value. Map Interface cung cấp cho ta các phương thức để tương tác với kiểu dữ liệu như vậy. Không giống như các interface ở trên, Map Interface không kế thừa từ Collection Interface mà đây là 1 interface độc lập với các phương thức của riêng mình. Dưới đây là một số class về Map cần chú ý:

  • TreeMap: là class thực thi giao diện Map Interface với dạng cây đỏ đen (Red-Black tree) trong đó các key đã được sắp xếp. Class này cho phép thời gian thêm, sửa, xóa và tìm kiếm 1 phần tử trong Map là tương đương nhau và đều là O(log(n))
  • HashMap: là class thực thi giao diện Map Interface với các key được lưu trữ dưới dạng bảng băm, cho phép tìm kiếm nhanh O(1).
  • EnumMap: cũng là 1 Map class nữa, tuy nhiên các key trong Map lại là các enum chứ không phải object như các dạng Map class ở trên.
  • WeakHashMap: tương tự như HashMap tuy nhiên có 1 điểm khác biệt đáng chú ý là các key trong Map chỉ là các Weak reference (hay Weak key), có nghĩa là khi phần tử sẽ bị xóa khi key được giải phóng hay không còn một biến nào tham chiếu đến key nữa.

Nguồn tham khảo:

http://vietjack.com/java/collection_trong_java.jsp https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html http://that2u.com/java-collection-framework-phan-1-gioi-thieu-chung/

Java Collections đề cập đến một tập hợp các đối tượng riêng lẻ được biểu diễn như một đơn vị duy nhất. Bạn có thể thực hiện tất cả các thao tác như tìm kiếm, sắp xếp, chèn, xóa,… trên Java Collections giống như bạn thao tác với dữ liệu.

Tham khảo Lộ trình Java Spring Boot Full Stack 7 tháng dành cho người chuyển ngành, chuyển nghề, sinh viên CNTT năm 3,4 muốn học xong đi làm sớm để tích lũy kinh nghiệm. Liên hệ tư vấn: Ms Mẫn - 0963023185 - [email protected]

Trong bài viết này, chúng ta sẽ tìm hiểu từng khía cạnh của Java Collections.

Java Collection Framework là gì?

Java Collection Framework cung cấp một kiến trúc để lưu trữ và thao tác với một nhóm đối tượng. Một Java Collection Framework bao gồm:

  • Interfaces: Interface trong Java đề cập đến các kiểu dữ liệu trừu tượng. Chúng cho phép Java collections được thao tác độc lập với các biểu diễn của chúng. Ngoài ra, chúng tạo thành một hệ thống phân cấp trong ngôn ngữ lập trình hướng đối tượng.
  • Classes: Các lớp trong Java là sự triển khai của collection interface. Nó đề cấp đến các cấu trúc dữ liệu được sử dụng lặp đi lặp lại.
  • Algorithm: Thuật toán đề cập đến các phương pháp được sử dụng để thực hiện các hoạt động như tìm kiếm và sắp xếp trên đối tượng triển khai của collection interface. Các thật toán có bản chất đa hình vì cùng một phương pháp có thể sử dụng được nhiều dạng hoặc bạn có thể nói có nhiều cách triển khai khác nhau của java collection interface

Cấu trúc phân cấp Java Collection Framework

Java Collection Framework bao gồm các interface và các lớp. Bây giờ, chúng ta hãy xem hệ thống phân cấp java collection framework.

Trong hai hình trên, phần màu xanh đề cập đến các interface khác nhau và phần màu vàng xác định lớp.

Ngoài các collections, framework còn xác định Map interface và class. Maps lưu trữ các cặp key/value. Mặc dù chúng không phải là collections, nhưng chúng được tích hợp đầy đủ với các collections.

Collection interfaces

Trong collection interface chúng ta có các interface chính như: List interface, Set, SortedSet, Map và SortedMap. Giờ hãy cùng tìm hiểu tổng quan về các interface đó:

  • List interface: Các phần tử trong List interface được sắp xếp có thứ tự và có thể có giá trị giống nhau.
  • Set: Các phần tử trong Set là duy nhất, không chứa các phần tử chùng lặp.
  • SortedSet: Là một dạng riêng của Set interface, trong đó các giá trị của các phần tử mặc định được sắp xếp tăng dần.
  • Map: Lưu trữ các cặp key/value, key của các phần tử này là duy nhất,
  • SortedMap: Là một dạng riêng của Map interface, trong đó key được sắp xếp theo thứ tự tăng dần.

Class Collections

Java cung cấp một tập hợp các lớp tiêu chuẩn dùng để triển khai các interface collection. Trong class collections chúng ta có rất nhiều loại, giờ hãy cùng tìm hiểu tổng quan về từng loại:

  • AbstractCollection: Triển khai hầu hết collection interface
  • AbstractList: kế thừa từ AbstractCollection và implements hầu hết List interface
  • `Classes`0: Extends AbstractList, được sử dụng để triển khai một list không thể sửa đổi, truy cập tuần tự.
  • `Classes`1: Là 1 cấu trúc dữ liệu lưu trữ các phần tử dưới dạng danh sách. Các phần tử trong LinkedList được sắp xếp có thứ tự và có thể có giá trị giống nhau.
  • `Classes`2: Là kiểu danh sách sử dụng cấu trúc mảng để lưu trữ phần tử. Thứ tự các phần tử dựa theo thứ tự lúc thêm vào và giá trị của các phần tử này có thể trùng nhau.
  • `Classes`3: extends AbstractCollection và implements hầu hết Set interface
  • `Classes`4: Extends AbstractSet để sử dụng với bảng băm
  • `Classes`3: Extends HashSet cho phép lặp lại thứ tự chèn
  • `Classes`6: Implements một tập hợp được lưu trữ bởi tree. Extends AbstractSet
  • `Classes`7: Implements hầu hết Map interfaces
  • `Classes`8: Extends AbstractMap để sử dụng bảng băm
  • `Classes`9: Extends AbstractMap để sử dụng tree
  • `Algorithm`0: Extends AbstractMap để sử dụng bảng băm với các khóa yếu.
  • `Algorithm`1: Extends HashMap, cho phép lặp lại thứ tự chèn
  • `Algorithm`2: Extends AbstractMap

Collection Algorithms

Collection framework xác định một số thuật toán có thể được áp dụng cho collections và maps. Các thuật toán này được định nghĩa là các phương thức static trong class Collections

Sử dụng Iterator

Khi muốn duyệt qua các phần tử của một đối tượng nào đó thì thông thường chúng ta hay sử dụng các loại vòng lặp như for, while hoặc do - while. Nhưng đối với Collections thì chúng ta sử dụng một cách mới để duyệt qua các phần tử của một Collection đó là Iterator.

Đối với Collections, Iterator là một Interface cung cấp một số các phương thức để duyệt (lặp) qua các phần tử của bất kỳ tập hợp nào. Ngoài ra, Iterator còn có khả năng xóa những phần tử của một tập hợp trong quá trình lặp.

Interface Comparator và Comparable

Java cung cấp 2 Interface Comparable và Comparator để so sánh và sắp xếp vị trí 2 đối tượng của một Collection. Chi tiết về 2 Interface này chúng ta sẽ tìm hiểu trong các bài viết khác

Java Collections framework cho phép lập trình viên truy cập vào các cấu trúc dữ liệu được đóng gói sẵn cũng như các thuật toán để thao tác với chúng.

Collection 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 collections interface khai báo các hoạt động coc thể thực hiện trên mỗi loại bộ sưu tập.

đánh giá Top List List So Sánh So sánh Collection trong Java List