Java collections framework: lớp Vector và lớp Stack

Đây là bài 43/62 bài của series môn học Ngôn ngữ lập trình Java

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 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.

Sự khác nhau giữa ArrayList và Vector trong Java

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.

Stack kế thừa Vector trong Java

Để 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
5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Java collections framework: List interface và lớp ArrayListJava collections framework: Queue interface và lớp LinkedList >>
Chia sẻ trên mạng xã hội:

Để lại một bình luận

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.