Arraylist là gì

Video hướng dẫn:

Tạo ArrayList

Một trong những nhược điểm lớn của mảng thông thườnglà kích thước của nó là cố định trong quá trình tạo mảng, rồi sau đó kích thước rất khóđược thay đổi trong quá trình thực thi chương trình. Tuy nhiên, đôi khi ta không thể biết chính xác là có bao nhiêu phần tử sẽ được lưu trong mảng. Ví dụ, khi một người đang mua sắmtrực tuyến, số lượng các sản phẩm mà sẽ được đưa vào giỏ hàng là không cố định từ đầu. Trong trường hợp này, ta có thể phải tạo một mảng với kích thước lớn nhất có thể để lưu tất cả các sản phẩm mà người dùng muốn mua. Tuy nhiên, nếu người dùng chỉ thêm vào giỏ hàngmột vài sản phẩm thì coi như phần còn lại của bộ nhớ sẽ trở thành dư thừa, tức là gây lãng phí, ảnh hưởng đến hiệu năng của chương trình. Tương tự như vậy, nếu người dùng cố gắng thêm thật nhiều sản phẩm vào giỏ hàng dẫn đến vượt quá kích thước mảng thì sẽ phát sinh lỗi. Ngoài ra, việc thêm và bớt phần tử đối với mảng thông thườnglà một tác vụ khó. Một nhược điểm nữa của mảng là nó chỉ lưa trữ được một kiểu dữ liệu mà thôi.

Để giải quyết những vấn đề trên, thì ta cần phải có một cấu trúc vùng nhớ mà có thể được cấp phát tùy vào yêu cầu thực tế. Ngoài ra, việc thêm và bớt các giá trị cũng cần phải được giải quyết một cách dễ dàng. Java cung cấp khái niệm tập hợp để giải quyết vần đề này.

Một tập hợp là một đối tượng đơn trong đó nhóm nhiều phần tử vào trong một đơn vị. Các tập hợp được dùng để lưu, truy xuất, và thao tác dữ liệu một cách tổng hợp. Thông thường thì các tập hợp sẽ đại diện cho các thành phần dữ liệu tạo thành một nhóm mang tính thực tếtự nhiên, chẳng hạn như tập hợp các thẻ, tập hợp các ký tự, một danh sách các số điện thoại, một danh sách sinh viên.

Java cung cấp các giao diện [interface] tập hợp để tạo ra các loại tập hợp khác nhau. Giao diện cơ bản là làCollection trong đó cho phép thao tác với các loại tập hợp khác nhau như thể hiện ở hình dưới đây.


Các giao diện tập hợp cơ bản

Mục đích chính của việc sử dụng từng giao diện tập hợp được thể hiện như bảng dưới đây.

Giao diện Hash table Resizable array Tree Linked list Hash table + Linked list
Set HashSet - TreeSet - LinkedHashSet
List - ArrayList - LinkedList -
Queue - - - - -
Map HashMap - TreeMap - LinkedHashMap

Các khả năng thực thi khác nhau của các loại tập hợp khác nhau có thể được sử dụng trong những tình huống khác nhau. Tuy nhiên, ArrayList, HashSet, vàHashMapđược sử dụng thường xuyên nhất trong các ứng dụng. Ngoài ra, các giao diện gồmSortedSet vàSortedMap không được đưara trong bảng liệt kê ở trênvì mỗi loại này có một sự thực thiTreeSet vàTreeMap tương ứng được liệt kê trong các hàngSet và Map. Hàng đợi có hai sự thực thi làLinkedList dùng để thực thiList vàPriorityQueue không được thể hiệntrong bảng. Hai loại thực thi này cung cấp những ý nghĩa rất khác nhau. LinkedList sử dụng thứ tựFirst In First Out [FIFO], trong khi PriorityQueue lại sắp xếp các phần tử theo giá trị mà chúng chứa.

Mỗi một sự thực thi cung cấp tất cả các hoạt động tùy chọnthể hiện trong giao diệncủa nó. Tất cả các loại thực thực thi đều chấp nhận các phần tử, khóa và giá trị null. Để sử dụng giao diệnthì người dùng phải khai báo gói java.util trong lớp.

Lưu ý:Một gói là một tập hợp các lớp có liên quan. Gói java.utilbao gồm một tập hợptất cả các giao diện và các lớp.

LớpArrayList là tập hợp được sử dụng thường xuyên nhất, nó có những đặc điểm sau đây:

- Rất linh hoạt trong việc tăng hoặc giảm kích thước khi cần.

- Cung cấp một số phương thức hữu dụng để thao tác với tập hợp.

- Chèn và xóa dữ liệu dễ dàng.

- Có thể truy xuất bằng cách sử dụng vòng lặp for, vòng lặp for cải tiến, hoặc các loại vòng lặp khác.

ArrayList cung cấp các phương thức để thao tác với kích thước của mảng, nó thừa kế từAbstractList và thực thi các giao diện như List,Cloneable, vàSerializable. Capacity của mộtArrayList tăng lên hoặc giảm đi một cách tự động. Nó lưu tất cả các phần tử với các kiểu khác nhau, bao gồm cả null.

Bảng dưới đây trình bày các hàm tạo của ArrayList.

Hàm tạo Mô tả
ArrayList[] Tạo một ArrayList rỗng với capacity khởi tạo là 10.
ArrayList[Collection c] Tạo một ArrayList bao gồm các phần tử của tập hợp c
ArrayList[int capacity] Tạo một ArrayList với capacity cho trước. Capacity là kích thước của ArrayList, nó chỉ ra số lượng tối đa mà ArrayList có thể lưu, nhưng nếu kích thước tăng lên vượt quá capacity thì capacity của ArrayList sẽ tự động tăng lên.

ArrayList bao gồm một số phương thức dùng để thêm phần tử. Những phương thức này có thể chia thành các nhóm như sau:

- Các phương thức thêm một hoặc nhiều phần tử vào cuối danh sách.

- Các phương thức chèn một hoặc nhiều phần tử vào mọt vị trí mong muốn trong danh sách.

Các phương thức cơ bản của ArrayList được thể hiện như bảng dưới đây.

Phương thức Mô tả
void add[int index,Object element] Chèn phần tử element vào ArrayList tại vị trí có chỉ số index. Nếu index>=size[] hoặc =size[] hoặc index= size[] hoặc index < 0 thì ném ra ngoại lệ throwsIndexOutOfBoundsException.
protected void removeRange[int fromIndex, int toIndex] Xóa tất cả các phần tử mà có chỉ số nằm trong đoạn [fromIndex,toIndex].
Object set[int index,Object element] Thay phần tử có chỉ số index bằng phần tử element. Nếu index >= size[] hoặc index

Chủ Đề