Java 64. Hiểu rõ cấu trúc SET trong lập trình Java | Bài tập rút thăm trúng thưởng



    Bản quyền thuộc về TITV.vn, 
    vui lòng không đăng tải lại nội dung từ trang này.

    Video giải thích chi tiết

    Giới thiệu về cấu trúc SET trong Java

    Set là một interface kế thừa Collection interface trong java. Set trong java là một Collection không thể chứa các phần tử trùng lặp.

    Set được triển khai bởi Hashset, LinkedHashset, Treeset hoặc EnumSet.

    • HashSet lưu trữ các phần tử của nó trong bảng băm, là cách thực hiện tốt nhất, tuy nhiên nó không đảm bảo về thứ tự các phần tử được chèn vào.

    • TreeSet lưu trữ các phần tử của nó trong một cây, sắp xếp các phần tử của nó dựa trên các giá trị của chúng, về cơ bản là chậm hơn HashSet.

    • LinkedHashSet được triển khai dưới dạng bảng băm với có cấu trúc dữ liệu danh sách liên kết, sắp xếp các phần tử của nó dựa trên thứ tự chúng được chèn vào tập hợp (thứ tự chèn).

    • EnumSet là một cài đặt chuyên biệt để sử dụng với các kiểu enum.

    https://docs.oracle.com/javase/8/docs/api/java/util/Set.html


    Modifier and Type

    Phương pháp và Mô tả

    boolean

    add(E e)

    Thêm phần tử được chỉ định vào tập hợp này nếu nó chưa có (hoạt động tùy chọn).

    boolean

    addAll(Collection<? extends E> c)

    Thêm tất cả các phần tử trong tập hợp được chỉ định vào tập hợp này nếu chúng chưa có mặt (thao tác tùy chọn).

    void

    clear()

    Xóa tất cả các phần tử khỏi tập hợp này (thao tác tùy chọn).

    boolean

    contains(Object o)

    Trả về true nếu tập hợp này chứa phần tử được chỉ định.

    boolean

    containsAll(Collection<?> c)

    Trả về true nếu tập hợp này chứa tất cả các phần tử của tập hợp được chỉ định.

    boolean

    equals(Object o)

    So sánh đối tượng được chỉ định với tập hợp này cho bằng nhau.

    int

    hashCode()

    Trả về giá trị mã băm cho tập hợp này.

    boolean

    isEmpty()

    Trả về true nếu tập hợp này không chứa phần tử nào.

    Iterator<E>

    iterator()

    Trả về một trình lặp trên các phần tử trong tập hợp này.

    boolean

    remove(Object o)

    Loại bỏ phần tử được chỉ định khỏi tập hợp này nếu nó có mặt (hoạt động tùy chọn).

    boolean

    removeAll(Collection<?> c)

    Xóa khỏi tập hợp này tất cả các phần tử có trong tập hợp được chỉ định (thao tác tùy chọn).

    boolean

    retainAll(Collection<?> c)

    Chỉ giữ lại các phần tử trong tập hợp này có trong tập hợp được chỉ định (thao tác tùy chọn).

    int

    size()

    Trả về số phần tử trong tập hợp này (số lượng phần tử của nó).

    default Spliterator<E>

    spliterator()

    Tạo một Spliteratortrên các phần tử trong tập hợp này.

    Object[]

    toArray()

    Trả về một mảng chứa tất cả các phần tử trong tập hợp này.

    <T> T[]

    toArray(T[] a)

    Trả về một mảng chứa tất cả các phần tử trong tập hợp này; kiểu thời gian chạy của mảng được trả về là kiểu của mảng được chỉ định.

     Code chi tiết 

    package main;
    
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.Set;
    
    public class RutThamTrungThuong_HashSet {
    	Set<String> thungPhieuDuThuong = new HashSet<String>();
    	
    	public RutThamTrungThuong_HashSet() {
    	}
    	
    	public boolean themPhieu(String giaTri) {
    		return this.thungPhieuDuThuong.add(giaTri);
    	}
    	
    	public boolean xoaPhieu(String giaTri) {
    		return this.thungPhieuDuThuong.remove(giaTri);
    	}
    	
    	public boolean kiemTraPhieuTonTai(String giaTri) {
    		return this.thungPhieuDuThuong.contains(giaTri);
    	}
    	
    	public void xoaTatCaPhieuDuThuong() {
    		this.thungPhieuDuThuong.clear();
    	}
    	
    	public int laySoLuong() {
    		return this.thungPhieuDuThuong.size();
    	}
    	
    	public String rutMotPhieu() {
    		String ketQua = "";
    		Random rd = new Random();
    		int viTri = rd.nextInt(this.thungPhieuDuThuong.size());
    		ketQua = (String) this.thungPhieuDuThuong.toArray()[viTri];
    		return ketQua;
    	}
    	
    	public void inTatCa() {
    		System.out.println(Arrays.toString(this.thungPhieuDuThuong.toArray()));
    	}
    
    	public static void main(String[] args) {
    		int luaChon = 0;
    		Scanner sc = new Scanner(System.in);
    		RutThamTrungThuong_HashSet rt = new RutThamTrungThuong_HashSet();
    		do {
    			System.out.println("--------------------------------------");
    			System.out.println("MENU: ");
    			System.out.println("1. Thêm mã số dự thưởng.");
    			System.out.println("2. Xóa mã số dự thưởng.");
    			System.out.println("3. Kiểm tra mã số dự thưởng có tồn tại hay không?");
    			System.out.println("4. Xóa tất cả các phiếu dự thưởng.");
    			System.out.println("5. Số lượng phiếu dự thưởng.");
    			System.out.println("6. Rút thăm trúng thưởng.");
    			System.out.println("7. In ra tất cả các phiếu.");
    			System.out.println("0. Thoát khỏi chương trình");
    			luaChon = sc.nextInt();
    			sc.nextLine();
    			if(luaChon==1 || luaChon==2||luaChon==3) {
    				System.out.println("Nhập vào mã phiếu dự thưởng: ");
    				String giaTri = sc.nextLine();
    				if(luaChon==1) {
    					rt.themPhieu(giaTri);
    				}else if(luaChon==2) {
    					rt.xoaPhieu(giaTri);
    				}else {
    					System.out.println("Kết quả kiểm tra: "+rt.kiemTraPhieuTonTai(giaTri));
    				}
    			}else if(luaChon==4) {
    				rt.xoaTatCaPhieuDuThuong();
    			}else if(luaChon==5) {
    				System.out.println("Số lượng phiếu là: "+ rt.laySoLuong());
    			}else if(luaChon==6) {
    				System.out.println("Mã số trúng thưởng là: "+ rt.rutMotPhieu());
    			}else if(luaChon==7) {
    				System.out.println("Các mã phiếu dự thưởng là: ");
    				rt.inTatCa();
    			}
    		}while(luaChon!=0);
    	}
    }
    

    package main;
    
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.Set;
    import java.util.TreeSet;
    
    public class RutThamTrungThuong_TreeSet {
    	Set<String> thungPhieuDuThuong = new TreeSet<String>();
    	
    	public RutThamTrungThuong_TreeSet() {
    	}
    	
    	public boolean themPhieu(String giaTri) {
    		return this.thungPhieuDuThuong.add(giaTri);
    	}
    	
    	public boolean xoaPhieu(String giaTri) {
    		return this.thungPhieuDuThuong.remove(giaTri);
    	}
    	
    	public boolean kiemTraPhieuTonTai(String giaTri) {
    		return this.thungPhieuDuThuong.contains(giaTri);
    	}
    	
    	public void xoaTatCaPhieuDuThuong() {
    		this.thungPhieuDuThuong.clear();
    	}
    	
    	public int laySoLuong() {
    		return this.thungPhieuDuThuong.size();
    	}
    	
    	public String rutMotPhieu() {
    		String ketQua = "";
    		Random rd = new Random();
    		int viTri = rd.nextInt(this.thungPhieuDuThuong.size());
    		ketQua = (String) this.thungPhieuDuThuong.toArray()[viTri];
    		return ketQua;
    	}
    	
    	public void inTatCa() {
    		System.out.println(Arrays.toString(this.thungPhieuDuThuong.toArray()));
    	}
    
    	public static void main(String[] args) {
    		int luaChon = 0;
    		Scanner sc = new Scanner(System.in);
    		RutThamTrungThuong_TreeSet rt = new RutThamTrungThuong_TreeSet();
    		do {
    			System.out.println("--------------------------------------");
    			System.out.println("MENU: ");
    			System.out.println("1. Thêm mã số dự thưởng.");
    			System.out.println("2. Xóa mã số dự thưởng.");
    			System.out.println("3. Kiểm tra mã số dự thưởng có tồn tại hay không?");
    			System.out.println("4. Xóa tất cả các phiếu dự thưởng.");
    			System.out.println("5. Số lượng phiếu dự thưởng.");
    			System.out.println("6. Rút thăm trúng thưởng.");
    			System.out.println("7. In ra tất cả các phiếu.");
    			System.out.println("0. Thoát khỏi chương trình");
    			luaChon = sc.nextInt();
    			sc.nextLine();
    			if(luaChon==1 || luaChon==2||luaChon==3) {
    				System.out.println("Nhập vào mã phiếu dự thưởng: ");
    				String giaTri = sc.nextLine();
    				if(luaChon==1) {
    					rt.themPhieu(giaTri);
    				}else if(luaChon==2) {
    					rt.xoaPhieu(giaTri);
    				}else {
    					System.out.println("Kết quả kiểm tra: "+rt.kiemTraPhieuTonTai(giaTri));
    				}
    			}else if(luaChon==4) {
    				rt.xoaTatCaPhieuDuThuong();
    			}else if(luaChon==5) {
    				System.out.println("Số lượng phiếu là: "+ rt.laySoLuong());
    			}else if(luaChon==6) {
    				System.out.println("Mã số trúng thưởng là: "+ rt.rutMotPhieu());
    			}else if(luaChon==7) {
    				System.out.println("Các mã phiếu dự thưởng là: ");
    				rt.inTatCa();
    			}
    		}while(luaChon!=0);
    	}
    }
    

    1 nhận xét: