So sánh các collection trong java năm 2024
Trước JDK 1.2, các cấu trúc dữ liệu của Java bao gồm mảng, Vector và Hashtable. JDK 1.2 đã giới thiệu Collection Framework và trang bị thêm các lớp kế thừa (Vector và Hashtable) để người sử dụng có thể lựa chọn các collection phù hợp cho bài toán của mình. Show Mặc dù chúng ta có thể sử dụng một mảng để lưu trữ một nhóm các phần tử cùng loại (nguyên thủy hoặc đối tượng). Tuy nhiên, mảng không hỗ trợ cái gọi là phân bổ động - nó có độ dài cố định không thể thay đổi một khi được phân bổ. Hơn nữa, mảng là một cấu trúc tuyến tính đơn giản. Nhiều ứng dụng có thể yêu cầu cấu trúc dữ liệu phức tạp hơn như danh sách được liên kết, ngăn xếp, hashtable... 2. Giới thiệu về Java Collection FrameworkCollection Framework cung cấp 1 kiến trúc để lưu trữ và thao tác với một nhóm các đối tượng. Java Collections có thể thi hành được tất cả các hoạt động mà bạn thực hiện trên dữ liệu như tìm kiếm, sắp xếp, chèn, thao tác và xóa. Gói Java Collection Framework bao gồm:
Hệ thống phân cấp của Collection Framework: 3. Collection và Collections trong java
Một số phương thức có trong Collections
Một số phương thức có trong collection
4. Một số lớp trong collection4.1. List
a. ArrayListLớp ArrayList sử dụng một mảng động để lưu trữ các phần tử. Nó kế thừa lớp AbstractList và implement interface List. Một số đặc điểm quan trọng của ArrayList: • Có thể chứa các phần tử trùng lặp • Duy trì thứ tự chèn. • Không đồng bộ. • Cho phép truy cập ngẫu nhiên nhờ index. • Vì bản chất của ArrayList vẫn sử dụng mảng để lưu trữ dữ liệu nên các thao tác xóa hay thêm phần tử sẽ chậm. Nên sử dụng ArrayList trong các trường hợp cần nhiều việc truy xuất các phần tử. b. LinkedListLớp LinkedList sử dụng một danh sách liên kết đôi để lưu trữ phần tử. Nó cung cấp một cấu trúc dữ liệu danh sách liên kết. Nó kế thừa lớp AbstractList và thực hiện các giao diện List và Deque. Đặc điểm của LinkedList: • Có thể chứa các phần tử trùng lặp. • Duy trì thứ tự chèn. • Không đồng bộ. • Truy xuất phần tử chậm hơn so với ArrayList. • Việc thao tác dữ liệu nhanh hơn vì không cần dịch chuyển các phần tử. Nên sử dụng LinkedList trong trường hợp cần nhiều thao tác thêm xóa phần tử. 4.2. Seta. HashSetLớp Java Hashset được sử dụng để tạo một collection sử dụng bảng băm để lưu trữ. Nó kế thừa lớp AbstractSet và implement interface Set. Đặc điểm của HashSet: • Hashset lưu trữ các phần tử bằng cách sử dụng một cơ chế gọi là hashing. HashSet dựa vào giá trị hashcode() để phân biệt các phần tử • Không chứa các phần tử trùng lặp. • HashSet cho phép chứa giá trị null. • Không đồng bộ • Không duy trì thứ tự chèn. • Được sử dụng trong các hoạt động tìm kiếm b. TreeSetLớp TreeSet được implement interface Set. Nó lưu trữ các phần tử dưới dạng cây. Đặc điểm của TreeSet: • Không chứa các phần tử trùng lặp giống HashSet. • Thời gian truy xuất phần tử nhanh. • Không cho phép phần tử null do cần phải sắp xếp các phần tử. • Không đồng bộ. • Sắp xếp các phần tử theo thứ tự tăng dần. 4.3. Queue và PriorityQueueQueue là 1 interface kế thừa Collection và có thêm các phương thức dung để chèn, xóa phần tử vào hàng đợi. Lớp PriorityQueue cung cấp phương tiện sử dụng hàng đợi. Nhưng nó không chỉ đặt các phần tử theo FIFO mà người sử dụng có thể chỉ định thông qua các phương thức có trong Collection 4.4. Mapa. HashMapLớp HashMap lưu trữ các phần tử dưới dạng 1 cặp key-value. Đặc điểm của HashMap: • Lớp Java HashMap chứa các giá trị dựa trên khóa. • Các khóa không được trùng lặp. • Có thể chứa 1 key null và nhiều value null. • Không đồng bộ. • Không duy trì thứ tự sắp xếp Vì các phần tử trong HashMap không duy trì thứ tự sắp xếp vậy khi ta muốn truy xuất phần tử thông qua index thì sẽ làm thế nào? Một lớp mở rộng của HashMap đó là LinkedHashMap. Lớp này duy trì 1 danh sách liên kết đôi chạy qua tất cả các phần tử bên trong nó vì vậy nó sẽ duy trì được thứ tự chèn các phần tử bên trong Map. Và khi bạn cần truy xuất thông qua index, bạn cần phải convert sang ArrayList để có thể truy xuất. Ví dụ
b. TreeMapLưu trữ các cặp dữ liệu dưới dạng cây. Đặc điểm của TreeMap: • Không chứa 1 key null nhưng có thể chứa nhiều value null. • Không đồng bộ. • Duy trì thứ tự tăng dần các key. 5. Tổng kếtTrên đây là bài giới thiệu về Collection framework. Thông qua bài viết này mong các bạn có thể cân nhắc lựa chọn các lớp phù hợp với bài toán của mình. Tài liệu tham khảo: https://www.javatpoint.com/collections-in-java https://www3.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html https://docs.oracle.com/javase/tutorial/collections/ |