Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa ArrayList và HashSet trong Java

Bảng so sánh nhanh

Tiêu chíArrayListHashSet
Interface triển khaiListSet
Cấu trúc nội bộMảng động (dynamic array)HashMap (key = element, value = dummy)
Thứ tự phần tửGiữ thứ tự thêm (insertion order)Không đảm bảo thứ tự (unordered)
Cho phép trùng lặpCóKhông (unique elements)
Truy xuất bằng indexHỗ trợ get(index), remove(index) – O(1)Không có index, không có get()
Phần tử nullCho phép nhiều nullChỉ cho phép tối đa 1 null
Hiệu năng tìm kiếmO(n) – duyệt tuần tựO(1) trung bình (hash-based)
Gói (package)java.utiljava.util

Ví dụ ArrayList

import java.util.*;

public class ArrayListDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(5);
        for (int i = 1; i <= 5; i++) list.add(i);
        System.out.println(list); // [1, 2, 3, 4, 5]

        list.remove(3); // xóa index 3 (phần tử 4)
        System.out.println(list); // [1, 2, 3, 5]

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " "); // 1 2 3 5
        }
    }
}

Ví dụ HashSet

import java.util.*;

public class HashSetDemo {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        set.add(4);
        set.add(4); // trùng lặp -> bỏ qua

        for (Integer n : set) {
            System.out.print(n + " "); // thứ tự không xác định, ví dụ: 1 2 3 4
        }
    }
}

Khi nào dùng cái nào?

  • ArrayList: Cần giữ thứ tự, truy xuất theo index, cho phép trùng lặp.
  • HashSet: Cần tập hợp duy nhất (unique), kiểm tra tồn tại nhanh (contains), không quan tâm thứ tự.