Skip to main content

Command Palette

Search for a command to run...

Bài 1: Tổng Quan Về Collection Framework

Published
5 min readView as Markdown

I. Giới Thiệu

Java Collection Framework là một tập hợp các lớp và giao diện cung cấp cấu trúc dữ liệu và thuật toán để quản lý các tập hợp dữ liệu. Framework này giúp lập trình viên lưu trữ, truy cập, và thao tác trên dữ liệu một cách dễ dàng và hiệu quả.

II. Các Thành Phần Chính Của Collection Framework

Collection Framework trong Java bao gồm ba nhóm chính: List, Set, và Map. Mỗi nhóm cung cấp các đặc điểm và chức năng riêng biệt để giải quyết các nhu cầu cụ thể trong quản lý dữ liệu.

  1. List Interface

    • Đặc điểm: List là một tập hợp có thứ tự, cho phép các phần tử trùng lặp.

    • Các lớp triển khai phổ biến: ArrayList, LinkedList, Vector, CopyOnWriteArrayList.

    • Ví dụ:

        List<String> arrayList = new ArrayList<>();
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("A"); // Cho phép phần tử trùng lặp
        System.out.println(arrayList); // Output: [A, B, A]
      
  2. Set Interface

    • Đặc điểm: Set là một tập hợp không có thứ tự, không cho phép các phần tử trùng lặp.

    • Các lớp triển khai phổ biến: HashSet, LinkedHashSet, TreeSet, EnumSet, CopyOnWriteArraySet.

    • Ví dụ:

        Set<String> hashSet = new HashSet<>();
        hashSet.add("A");
        hashSet.add("B");
        hashSet.add("A"); // Không cho phép phần tử trùng lặp
        System.out.println(hashSet); // Output: [A, B]
      
  3. Map Interface

    • Đặc điểm: Map là một tập hợp các cặp khóa-giá trị, không cho phép các khóa trùng lặp.

    • Các lớp triển khai phổ biến: HashMap, LinkedHashMap, TreeMap, Hashtable, ConcurrentHashMap.

    • Ví dụ:

        Map<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "A");
        hashMap.put(2, "B");
        hashMap.put(1, "C"); // Thay thế giá trị của khóa 1
        System.out.println(hashMap); // Output: {1=C, 2=B}
      

III. Sự Khác Nhau Giữa Các Loại Collection

  1. List vs. Set

    • List: Cho phép các phần tử trùng lặp, có thứ tự lưu trữ.

    • Set: Không cho phép các phần tử trùng lặp, không đảm bảo thứ tự lưu trữ.

    • Trường hợp sử dụng: Dùng List khi cần quản lý danh sách có thứ tự với các phần tử trùng lặp (ví dụ: danh sách sinh viên trong một lớp học). Dùng Set khi cần loại bỏ các phần tử trùng lặp và không quan tâm đến thứ tự (ví dụ: tập hợp các từ trong một văn bản).

  2. Set vs. Map

    • Set: Chỉ chứa các phần tử đơn lẻ, không có cặp khóa-giá trị.

    • Map: Chứa các cặp khóa-giá trị, mỗi khóa là duy nhất.

    • Trường hợp sử dụng: Dùng Set khi chỉ cần quản lý các phần tử đơn lẻ (ví dụ: tập hợp các ID duy nhất). Dùng Map khi cần liên kết các khóa duy nhất với các giá trị tương ứng (ví dụ: từ điển, bảng hash).

IV. Các Lớp Triển Khai Cụ Thể

  1. ArrayList

    • Đặc điểm: Dựa trên mảng động, có khả năng truy cập ngẫu nhiên nhanh, chèn/xóa ở giữa danh sách chậm.

    • Ví dụ:

        List<String> arrayList = new ArrayList<>();
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("C");
        System.out.println(arrayList); // Output: [A, B, C]
      
  2. LinkedList

    • Đặc điểm: Dựa trên cấu trúc danh sách liên kết, chèn/xóa ở giữa danh sách nhanh, truy cập ngẫu nhiên chậm.

    • Ví dụ:

        List<String> linkedList = new LinkedList<>();
        linkedList.add("A");
        linkedList.add("B");
        linkedList.add("C");
        System.out.println(linkedList); // Output: [A, B, C]
      
  3. HashSet

    • Đặc điểm: Dựa trên bảng băm, không đảm bảo thứ tự phần tử, cho hiệu suất tìm kiếm cao.

    • Ví dụ:

        Set<String> hashSet = new HashSet<>();
        hashSet.add("A");
        hashSet.add("B");
        hashSet.add("A"); // Không thêm phần tử trùng lặp
        System.out.println(hashSet); // Output: [A, B]
      
  4. HashMap

    • Đặc điểm: Dựa trên bảng băm, lưu trữ các cặp khóa-giá trị, không đảm bảo thứ tự.

    • Ví dụ:

        Map<Integer, String> hashMap = new HashMap<>();
        hashMap.put(1, "A");
        hashMap.put(2, "B");
        hashMap.put(1, "C"); // Thay thế giá trị của khóa 1
        System.out.println(hashMap); // Output: {1=C, 2=B}
      

V. Kết Luận

Collection Framework trong Java cung cấp một công cụ mạnh mẽ và linh hoạt cho việc quản lý dữ liệu. Hiểu rõ các thành phần của Collection Framework và cách chúng hoạt động sẽ giúp bạn sử dụng chúng một cách hiệu quả trong các ứng dụng của mình. Các bài tiếp theo sẽ đi sâu vào từng loại Collection cụ thể để cung cấp cái nhìn chi tiết hơn về cách sử dụng và tối ưu chúng.

VI. Tài Liệu Tham Khảo

  • Java SE Documentation: Java Collections Framework

  • "Effective Java" by Joshua Bloch: Các nguyên tắc và best practices khi sử dụng Collection Framework.

Bài Tập Thực Hành

  1. Tạo một chương trình Java sử dụng ArrayList để lưu trữ danh sách các sinh viên và in ra danh sách này.

  2. Tạo một chương trình Java sử dụng HashSet để lưu trữ các từ trong một đoạn văn và in ra danh sách các từ duy nhất.

  3. Tạo một chương trình Java sử dụng HashMap để lưu trữ tên sinh viên và điểm số của họ, sau đó in ra danh sách tên sinh viên và điểm số tương ứng.

Bài viết này sẽ giúp người đọc nắm được các khái niệm cơ bản và sự khác biệt giữa các loại Collection, từ đó có nền tảng vững chắc để tiếp tục học các chủ đề chi tiết hơn trong các bài tiếp theo.

More from this blog

devngu

169 posts