1. Lớp Vector trong Java
Lớp Vector kế thừa từ List interface giúp chúng ta tạo ra một mảng có thể thay đổi kích thước (resizable-array) giống như lớp ArrayList.
Lớp Vector và ArrayList đều kế thừa List interface nhưng 2 lớp này có một số điểm khác nhau. Vector thực hiện cơ chế đồng bộ (synchronized), ArrayList thì không đồng bộ (not synchronized). Có nghĩa là tại một thời điểm thì chỉ có 1 luồng xử lý trên Vector. Còn ArrayList thì có thể có nhiều luồng xử lý cùng một lúc. Điều này dẫn đến việc thao tác trên ArrayList sẽ nhanh hơn Vector.
Trên thực tế, khuyến khích lập trình viên sử dụng ArrayList hơn Vector.
Tạo ra một Vector
Vector<Type> vector = new Vector<>();
Trong đó, vector là tên của Vector được tạo ra. Type là kiểu dữ liệu của các phần tử trong Vector. Lưu ý: Không thể dùng các kiểu dữ liệu nguyên thủy cho Vector mà phải sử dụng Wrapper Class. Ví dụ:
//tạo một Vector lưu trữ Integer
Vector<Integer> vector= new Vector<>();
//tạo một Vector lưu trữ String
Vector<String> vector= new Vector<>();
Thêm các phần tử vào Vector
Hàm add(element)
thêm phần tử vào Vector. Hàm add(index, element)
thêm phần tử vào một vị trí xác định trước trong Vector. Hàm addAll(vector)
thêm tất cả phần tử của Vector vector vào một Vector khác.
import java.util.Vector;
class Main {
public static void main(String[] args){
Vector<String> languages = new Vector<>();
languages.add("Java");
languages.add(1, "C++");
languages.add(2, "Python");
System.out.println("Vector languages: " + languages);
Vector<String> temp = new Vector<>();
temp.addAll(languages);
System.out.println("Vector temp: " + languages);
}
}
Kết quả
Vector languages: [Java, C++, Python]
Vector temp: [Java, C++, Python]
Truy cập các phần tử trong Vector
Hàm get(index)
trả về phần tử ở một vị trí xác định trong Vector. Hàm iterator()
giúp trả về một đối tượng iterator để truy cập các phần tử trong Vector.
import java.util.Iterator;
import java.util.Vector;
class Main {
public static void main(String[] args){
Vector<String> languages = new Vector<>();
languages.add("Java");
languages.add(1, "C++");
languages.add(2, "Python");
System.out.println("Vector languages: " + languages);
// Using get()
String element = languages.get(2);
System.out.println("Element at index 2: " + element);
//Using iterator()
Iterator<String> iterate = languages.iterator();
System.out.print("Vector: ");
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Kết quả
Vector languages: [Java, C++, Python]
Element at index 2: Python
Vector: Java, C++, Python,
Xóa các phần tử trong Vector
Hàm remove(index)
xóa một phần tử ở một vị trí xác định trong Vector. Hàm removeAll()
xóa tất cả các phần tử trong Vector. Hàm clear()
xóa tất cả phần tử trong Vector, hàm này hiệu quả hơn removeAll()
.
import java.util.Vector;
class Main {
public static void main(String[] args){
Vector<String> languages = new Vector<>();
languages.add("Java");
languages.add(1, "C++");
languages.add(2, "Python");
System.out.println("Vector languages: " + languages);
languages.remove(1);
System.out.println("Vector languages: " + languages);
languages.clear();
System.out.println("Vector languages: " + languages);
}
}
Kết quả
Vector languages: [Java, C++, Python]
Vector languages: [Java, Python]
Vector languages: []
2. Lớp Stack trong Java
Lớp Stack trong Java collections framework giúp lưu trữ cấu trúc dữ liệu stack. Các bạn nên đọc lại bài Ngăn xếp (stack) là gì? Cách xây dựng ngăn xếp để hiểu rõ về cơ chế LIFO (Last In First Out) của Stack.
Lớp Stack kế thừa từ lớp Vector.
Để sử dụng lớp Stack, chúng ta cần import java.util.Stack
và tạo Stack với cú pháp sau:
Stack<Type> stacks = new Stack<>();
Trong đó, stacks là tên của Stack được tạo ra. Type là kiểu dữ liệu của các phần tử trong Stack. Lưu ý: Không thể dùng các kiểu dữ liệu nguyên thủy cho Stack mà phải sử dụng Wrapper Class. Ví dụ:
//tạo Stack lưu trữ Integer
Stack<Integer> stacks = new Stack<>();
//tạo Stack lưu trữ String
Stack<String> stacks = new Stack<>();
Lớp Stack kế thừa từ lớp Vector nên sẽ kế thừa tất cả các phương thức của Vector. Ngoài ra, Stack còn có các phương thức của riêng Stack là:
Phương thức push()
Phương thức push()
giúp thêm một phần tử vào stack.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
//Thêm phần tử vào Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
}
}
Kết quả
Stack: [Dog, Horse, Cat]
Phương thức pop()
Phương thức pop()
giúp xóa một phần tử ra khỏi stack.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
//Thêm phần tử vào Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
animals.pop();
System.out.println("Stack: " + animals);
}
}
Kết quả
Stack: [Dog, Horse, Cat]
Stack: [Dog, Horse]
Phương thức peek()
Phương thức peek()
giúp lấy ra phần tử ở đỉnh (top) của stack.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
//Thêm phần tử vào Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
String top = animals.peek();
System.out.println("Element at top: " + top);
}
}
Kết quả
Stack: [Dog, Horse, Cat]
Element at top: Cat
Phương thức search()
Phương thức search()
giúp tìm một phần tử trong stack. Nếu tìm thấy, phương thức này sẽ trả về vị trí của phần tử đó trong stack bắt đầu từ đỉnh (top) của stack.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
//Thêm phần tử vào Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
int position = animals.search("Horse");
System.out.println("Position of Horse: " + position);
}
}
Kết quả
Stack: [Dog, Horse, Cat]
Position of Horse: 2
Phương thức empty()
Phương thức empty()
giúp kiểm tra xem stack có rỗng hay không. Nếu stack rỗng trả về true, stack không rỗng trả về false.
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals= new Stack<>();
//Thêm phần tử vào Stack
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
boolean result = animals.empty();
System.out.println("Is the stack empty? " + result);
}
}
Kết quả
Stack: [Dog, Horse, Cat]
Is the stack empty? false