1- ArrayList
ArrayList là một lớp thi hành interface List và hỗ trợ tất cả các tính năng của List bao gồm cả các tính năng tuỳ chọn. Về cơ bản ArrayList quản lý một mảng để lưu trữ các phần tử của nó, mảng này có thể được thay thế bởi một mảng khác có độ dài lớn hơn nếu số phần tử của ArrayList tăng lên.
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Dưới đây là các đặc điểm của ArrayList:
ArrayList khá giống với Vector, ngoại trừ nó là không đồng bộ. Trong môi trường Multithreading nó nên được gói (wrapped) bằng cách sử dụng phương thức Collections.synchronizedList.
ArrayList<String> arrayList = new ArrayList<String>();
List<String> syncList = Collections.synchronizedList(arrayList);
CopyOnWriteArrayList là một biến thể an toàn theo luồng (thread-safe) của ArrayList mà bạn có thể cân nhắc sử dụng:
ArrayList constructors:
2- ArrayList lưu trữ các phần tử như thế nào?
ArrayList quản lý một mảng các đối tượng, tất cả các hành động thêm, chèn hoặc loại bỏ một phần tử ra khỏi ArrayList sẽ tạo ra hành động gán (hoặc cập nhập) giá trị cho các phần tử khác của mảng, nó có thể ảnh hưởng tới nhiều phần tử của mảng.
arrayList.add(X)
Khi bạn thêm một phần tử vào ArrayList, nó sẽ được gán vào một phần tử của mảng tại chỉ số arrayList.size().
arrayList.add(idx,X)
Khi bạn trèn một phần tử vào ArrayList, nhiều phần tử trên mảng sẽ phải cập nhập lại giá trị.
arrayList.remove(idx)
Loại bỏ một phần tử tại chỉ số idx ra khỏi ArrayList cũng làm cho nhiều phần tử của mảng phải cập nhập lại giá trị mới.
ArrayList sẽ thay thế mảng mà nó quản lý bằng một mảng mới có độ dài lớn hơn nếu số lượng phần tử được thêm vào lớn hơn độ dài của mảng hiện tại.
3- Examples
Ví dụ, sử dụng ArrayList trong môi trường Multithreading:
ArrayList_sync.java
package org.o7planning.arraylist.ex;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayList_sync {
public static void main(String[] args) throws InterruptedException {
new ArrayList_sync();
}
public ArrayList_sync() throws InterruptedException {
ArrayList<String> arrayList = new ArrayList<String>();
List<String> syncList = Collections.synchronizedList(arrayList);
ThreadA threadA = new ThreadA(syncList);
ThreadB threadB = new ThreadB(syncList);
threadA.start();
threadB.start();
threadA.join();
threadB.join();
for(String s: syncList) {
System.out.println(s);
}
}
class ThreadA extends Thread {
private List<String> list;
public ThreadA(List<String> list) {
this.list = list;
}
@Override
public void run() {
for(int i= 0; i< 1000; i++) {
this.list.add("A "+ i);
}
}
}
class ThreadB extends Thread {
private List<String> list;
public ThreadB(List<String> list) {
this.list = list;
}
@Override
public void run() {
for(int i= 0; i< 1000; i++) {
this.list.add("B "+ i);
}
}
}
}
Output:
...
A 938
B 898
A 939
B 899
A 940
B 900
A 941
B 901
A 942
...
ArrayList hỗ trợ tất cả các tính năng được đặc tả trong interface List bao gồm cả các tính năng tuỳ chọn. Bạn có thể tìm thấy các ví dụ tốt nhất về ArrayList trong bài viết dưới đây:
|