Các Tập Hợp Trong Java

I. Cơ Bản Về Tập Hợp

1. Khái Quát

2. Các Phương Thức Khởi Tạo và Thêm Phần Tử Của ArrayList

Ví dụ:

3. Các Phương Thức Của ArrayList

II. Nâng Cao Tập Hợp

III. Giao Diện Collection

1. Khái Quát

Ví dụ:

2. Các Phương Thức Thông Dụng Của Collection

Ví dụ:

3. Lặp Trong Collection

4. Giao Diện List

(1) Đặc Điểm và Khái Quát

Ví dụ:

(2) Các Phương Thức Riêng Của List

(3) Ngoại Lệ Sửa Đổi Đồng Thời

Ví dụ:

(4) Iterator Của List

Ví dụ:

(5) Vòng Lặp Tăng Cường

Ví dụ:

Ví dụ lặp với các phương pháp khác nhau:

(6) Đặc Điểm Của Các Lớp Con List

Ví dụ mã:

(7) Các Tính Năng Riêng Của LinkedList

Ví dụ:

5. Giao Diện Set

(1) Khái Quát

Ví dụ:

(2) Giá Trị Băm

Ví dụ:

(3) HashSet và Đặc Điểm

Ví dụ:

(4) Phân Tích Nguồn Mã Đảm Bảo Tính Duy Nhất Của HashSet

Khi thêm phần tử vào HashSet, hệ thống sẽ:

  • Tính toán mã băm của đối tượng để xác định vị trí chèn
  • So sánh mã băm với các phần tử hiện có
  • Nếu có mã băm trùng, gọi phương thức equals() để kiểm tra tính bằng nhau
  • Chỉ chèn khi không phát hiện phần tử trùng

Ví dụ với kiểu dữ liệu nguyên thủy:

...

Kết quả chạy:

Ví dụ với đối tượng tự định nghĩa:

...

Kết quả chạy:

Để HashSet hoạt động với đối tượng tự định nghĩa, cần ghi đè hashCode() và equals(). HashSet sử dụng HashMap bên trong, kiểm tra sự tồn tại bằng mã băm và phương thức equals()

(5) LinkedHashMap và Đặc Điểm

Ví dụ:

(6) TreeSet và Đặc Điểm

Ví dụ:

Sắp Xếp Tự Nhiên

① TreeSet sử dụng compareTo() để sắp xếp theo thứ tự tăng dần
② Lớp chứa phần tử phải implements Comparable
③ Phải triển khai phương thức compareTo()

Ví dụ:

Sắp Xếp Tùy Chỉnh

① Sử dụng Comparator khi không implements Comparable
② Phương thức compare() xác định thứ tự
③ Truyền Comparator vào constructor TreeSet
④ Giới hạn chỉ thêm các đối tượng cùng loại
⑤ Hai phần tử bằng nhau khi compare() trả về 0

Ví dụ:

IV. Giao Diện Map

1. Khái Quát

Ví dụ:

2. Các Chức Năng Của Map

3. Các Phương Pháp Truy Xuất Dữ Liệu

Ví dụ:

4. Các Cách Duyệt Map

(1) Cách 1

Ví dụ:

(2) Cách 2

Ví dụ:

5. Ví Dụ Minh Họa

Ví Dụ 1: HashMap Lưu Trữ Đối Tượng Sinh Viên

Ví Dụ 2: ArrayList Chứa HashMap

Ví Dụ 3: HashMap Chứa ArrayList

Ví Dụ 4: Đếm Tần Suất Ký Tự

V. Lớp Collections

1. Khái Quát

Ví dụ:

2. Ví Dụ

VI. Ví Dụ Thực Tế

1. Phân Tích Yêu Cầu Game Đấu Địa Chủ

package com.example.landlord;

import java.util.ArrayList;
import java.util.Collections;

public class Game {
    public static void main(String[] args) {
        // Khởi tạo bộ bài
        ArrayList<String> deck = new ArrayList<>();
        // Các chất bài
        String[] suits = {"♦", "♥", "♠", "♣"};
        // Các giá trị bài
        String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        
        // Tạo bộ bài
        for (String suit : suits) {
            for (String rank : ranks) {
                deck.add(suit + rank);
            }
        }
        deck.add("Joker Đen");
        deck.add("Joker Đỏ");
        
        // Xáo trộn
        Collections.shuffle(deck);
        
        // Chia bài
        ArrayList<String> playerOne = new ArrayList<>();
        ArrayList<String> playerTwo = new ArrayList<>();
        ArrayList<String> playerThree = new ArrayList<>();
        ArrayList<String> jokers = new ArrayList<>();
        
        for (int i = 0; i < deck.size(); i++) {
            String card = deck.get(i);
            if (i >= deck.size() - 3) {
                jokers.add(card);
            } else if (i % 3 == 0) {
                playerOne.add(card);
            } else if (i % 3 == 1) {
                playerTwo.add(card);
            } else {
                playerThree.add(card);
            }
        }
        
        // Hiển thị bài
        showCards("Người chơi 1", playerOne);
        showCards("Người chơi 2", playerTwo);
        showCards("Người chơi 3", playerThree);
        showCards("Jokers", jokers);
    }

    private static void showCards(String name, ArrayList<String> hand) {
        System.out.print(name + " có các lá: ");
        for (String card : hand) {
            System.out.print(card + " ");
        }
        System.out.println();
    }
}

2. Phiên Bản Nâng Cao

package com.example.advanced;

import java.util.*;

public class AdvancedGame {
    public static void main(String[] args) {
        // Ánh xạ từ chỉ số sang bài
        HashMap cardMap = new HashMap<>();
        // Danh sách chỉ số
        ArrayList<Integer> indices = new ArrayList<>();
        
        // Các chất và giá trị
        String[] suits = {"♦", "♥", "♠", "♣"};
        String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        
        int id = 0;
        for (String rank : ranks) {
            for (String suit : suits) {
                cardMap.put(id, suit + rank);
                indices.add(id++);
            }
        }
        cardMap.put(id++, "Joker Đen");
        cardMap.put(id++, "Joker Đỏ");
        
        // Xáo trộn chỉ số
        Collections.shuffle(indices);
        
        // Chia bài cho người chơi
        TreeSet<Integer> playerOne = new TreeSet<>();
        TreeSet<Integer> playerTwo = new TreeSet<>();
        TreeSet<Integer> playerThree = new TreeSet<>();
        TreeSet<Integer> jokers = new TreeSet<>();
        
        for (int i = 0; i < indices.size(); i++) {
            int cardId = indices.get(i);
            if (i >= indices.size() - 3) {
                jokers.add(cardId);
            } else if (i % 3 == 0) {
                playerOne.add(cardId);
            } else if (i % 3 == 1) {
                playerTwo.add(cardId);
            } else {
                playerThree.add(cardId);
            }
        }
        
        // Hiển thị bài
        displayHand("Người chơi 1", cardMap, playerOne);
        displayHand("Người chơi 2", cardMap, playerTwo);
        displayHand("Người chơi 3", cardMap, playerThree);
        displayHand("Jokers", cardMap, jokers);
    }

    private static void displayHand(String name, HashMap map, TreeSet<Integer> set) {
        System.out.print(name + " có: ");
        for (Integer index : set) {
            System.out.print(map.get(index) + " ");
        }
        System.out.println();
    }
}

Thẻ: Java Collections HashSet treeset HashMap

Đăng vào ngày 18 tháng 6 lúc 18:56