1. List interface trong collections framework
List interface giúp lưu trữ và truy cập các phần tử như mảng. Nó là interface được kế thừa từ Collection interface. Những lớp kế thừa List interface là ArrayList, LinkedList, Vector, Stack.
Để sử dụng List cũng như các lớp kế thừa List thì chúng ta phải import các interface và các lớp.
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
class Main {
public static void main(String[] args){
// ArrayList implementation of List
List<String> list1 = new ArrayList<>();
// LinkedList implementation of List
List<String> list2 = new LinkedList<>();
}
}
Trong ví dụ trên, chúng ta đã tạo ra đối tượng list1 và list2 của lớp ArrayList và LinkedList.
Các phương thức của List interface
List interface bao gồm tất cả phương thức của Collection interface bởi vì List interface kế thừa Collection interface. Một số phương thức phổ biến trong List interface là:
add()
thêm một phần tử vào listaddAll()
thêm tất cả phần tử của một list vào một list khácget()
giúp truy cập ngẫu nhiên những phần tử trong listiterator()
trả về đối tượng iterator để truy cập các thành phần trong listset()
thay đổi các phần tử trong listremove()
xóa một phần tử trong listremoveAll()
xóa tất cả các phần tử trong listclear()
xóa tất cả các phần tử trong list (hiệu quả hơnremoveAll()
)size()
trả về số lượng phần tử trong listtoArray()
chuyển đổi list thành mảng (array)contains()
trả về true nếu list bao gồm một phần tử cụ thể nào đó
2. Lớp ArrayList trong Java
Lớp ArrayList trong Java collections framework giúp lưu trữ các phần tử như mảng (array) nhưng mảng này có thể thay đổi kích thước. Lớp ArrayList kế thừa từ List interface.
ArrayList và Array trong Java có điểm khác nhau lớn. Đó là kích thước của mảng cố định và không thể thay đổi. Lớp ArrayList có thể giúp chúng ta lưu trữ mảng và có thể thay đổi kích thước mảng. ArrayList còn được gọi là mảng động (dynamic array).
Để sử dụng ArrrayList, chúng ta cần import java.util.ArrayList
và tạo một ArrayList theo cú pháp:
ArrayList<Type> arrayList= new ArrayList<>();
Trong đó, arrayList là tên của ArrayList được tạo ra. Type là kiểu dữ liệu của các phần tử trong ArrayList. Lưu ý: Không thể dùng các kiểu dữ liệu nguyên thủy cho ArrayList mà phải sử dụng Wrapper Class. Ví dụ:
//tạo arraylist lưu các phần tử kiểu Integer
ArrayList<Integer> arrayList = new ArrayList<>();
//tạo arraylist lưu các phần tử kiểu String
ArrayList<String> arrayList = new ArrayList<>();
2.1. Tạo và thêm các phần tử vào ArrayList
Sử dụng hàm add()
để thêm các phần tử vào ArrayList.
import java.util.ArrayList;
class Main {
public static void main(String[] args){
ArrayList<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("C");
languages.add("Python");
System.out.println("ArrayList: " + languages);
}
}
Kết quả
ArrayList: [Java, C, Python]
Có thể thêm các phần tử vào ArrayList với vị trí xác định.
ArrayList<String> languages = new ArrayList<>();
languages.add(0, "Java");
languages.add(1, "C++");
Có thể sử dụng hàm addAll()
để thêm tất cả các phần tử của một ArrayList vào một ArrayList khác.
ArrayList<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("C++");
ArrayList<String> temp = new ArrayList<>();
temp.addAll(languages);
2.2. Hàm get() và set() trong ArrayList
Sử dụng hàm get()
để lấy phần tử trong ArrayList. Sử dụng hàm set()
để thay đổi phần tử trong ArrayList.
import java.util.ArrayList;
class Main {
public static void main(String[] args){
ArrayList<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("C++");
languages.add("Python");
//lấy phần tử ở vị trí 1 trong ArrayList
String str = languages.get(1);
System.out.println("Element at index 1: " + str);
//thay đổi phần tử ở vị trí 1 trong ArrayList
languages.set(1, "C#");
System.out.println("ArrayList: " + languages);
}
}
Kết quả
Element at index 1: C++
ArrayList: [Java, C#, Python]
2.3. Xóa các phần tử trong ArrayList
Sử dụng hàm remove()
để xóa phần tử trong ArrayList. Nếu muốn xóa tất cả các phần tử trong ArrayList thì có thể dùng hàm removeAll()
hoặc clear()
.
import java.util.ArrayList;
class Main {
public static void main(String[] args){
ArrayList<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("C++");
languages.add("Python");
//remove phần tử ở vị trí 1 trong ArrayList
languages.remove(1);
System.out.println("ArrayList: " + languages);
//remove tất cả phần tử trong ArrayList
languages.removeAll(languages);
System.out.println("ArrayList: " + languages);
}
}
Kết quả
ArrayList: [Java, Python]
ArrayList: []
2.4. Duyệt các phần tử trong ArrayList với vòng lặp for-each
import java.util.ArrayList;
class Main {
public static void main(String[] args){
ArrayList<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("C++");
languages.add("Python");
System.out.println("ArrayList: " + languages);
System.out.println("for-each ArrayList:");
for(String language: languages){
System.out.println(language);
}
}
}
Kết quả
ArrayList: [Java, C++, Python]
for-each ArrayList:
Java
C++
Python
2.5. Các hàm thông dụng trong lớp ArrayList
Ngoài các hàm như add(), get(), set(), remove()
, lớp ArrayList còn có các hàm thông dụng khác như:
size()
trả về số lượng phần tử trong ArrayList.sort()
sắp xếp các phần tử trong ArrayList.clone()
tạo ra những ArrayList mới có các phần tử giống với ArrayList đã có.contains()
tìm một phần tử cụ thể trong ArrayList. Nếu tìm thấy thì trả về true còn không trả về false.ensureCapacity()
xác định tổng số phần tử mà ArrayList có thể lưu trữ.isEmpty()
kiểm tra ArrayList có rỗng (empty) hay không.indexOf()
tìm một phần tử cụ thể trong ArrayList. Nếu tìm thấy thì sẽ trả về vị trí của phần tử đó trong ArrayList. Nếu không tìm thấy thì sẽ trả về -1.