[Thực hành] Triển khai lớp List đơn giản

DSA: Danh sách

Mục tiêu

Luyện tập cài đặt cấu trúc List đơn giản.

Mô tả

Trong phần này, chúng ta sẽ phát triển một chương trình cho phép cài đặt cấu trúc List đơn giản sử dụng generic để lưu một tập dữ liệu bất kỳ. Chương trình gồm 2 lớp MyList và MyListTest như sơ đồ mô tả sau:

Lớp MyList gồm

Các thuộc tính

  • size xác định số phần tử trong danh sách, mặc định gán là 0.
  • DEFAULT_CAPACITY lưu số phần tử đối đa trong danh sách mặc định là 10.
  • Mảng đối tượng elements chứa các phần tử trong danh sách

Các phương thức:

  • Phương thức khởi tạo không tham số
  • Phương thức thêm một phần tử mới vào danh sách: add()
  • Phương thức thay đổi số phần tử tối đa trong danh sách: ensureCapa()
  • Phương thức truy cập một phần tử trong danh sách: get()

Lớp MyListTest chứa phương thức main() để thực thi ứng dụng

Các bước thực hiện

Bước 1: Tạo lớp MyList với các thuộc tính như mô tả

public class MyList<E> {    private int size = 0;    private static final int DEFAULT_CAPACITY = 10;    private Object elements[];    public MyList() {        elements = new Object[DEFAULT_CAPACITY];    }}

Bước 2: Cài đặt phương thức ensureCapa()

Mục đích: Tăng gấp đôi kích thước mảng chứa các phần tử

private void ensureCapa() {
        int newSize = elements.length * 2;
        elements = Arrays.copyOf(elements, newSize);
} 

Bước 3: Cài đặt phương thức add()

Mục đích: thêm một phần tử vào cuối của danh sách

Tham số đầu vào: phần tử cần thêm vào danh sách

Mã lệnh:

public void add(E e) {
        if (size == elements.length) {
            ensureCapa();
        }
        elements[size++] = e;
}

Bước 4: Cài đặt phương thức get()

Mục đích: Phương thức get() trả về phần tử vừa ở vị trí thứ i trong danh sách.

Tham số đầu vào: số nguyên chứa vị trí cần truy cập đến phần tử trong danh sách

Mã lệnh:

public E get(int i) {
        if (i>= size || i <0) {
            throw new IndexOutOfBoundsException("Index: " + i + ", Size " + i );
        }
       return (E) elements[i];
}

Bước 5: Tạo lớp MyListTest chứa phương thức main()

public class MyListTest {    public static void main(String[] args) {        //code here    }}

Bước 6: Cài đặt các trường hợp thực thi trong main()

Trường hợp 1: Tạo đối tượng listInteger chứa danh sách các số nguyên. Hiển thị các phần tử được thêm vào list theo vị trí và phần tử vượt quá số phần tử được thêm vào.

MyList<Integer> listInteger = new MyList<Integer>();listInteger.add(1);        listInteger.add(2);        listInteger.add(3);        listInteger.add(3);        listInteger.add(4);        System.out.println("element 4: "+listInteger.get(4));        System.out.println("element 1: "+listInteger.get(1));        System.out.println("element 2: "+listInteger.get(2));        listInteger.get(6);        System.out.println("element 6: "+listInteger.get(6));

Chạy chương trình, quan sát kết quả. Xoá 2 dòng listInteger.get(6) và hiển thị element 6 đi chuyển sang trường hợp thứ 2.

Trường hợp 2: Hiển thị phần tử ở vị trí -1 

listInteger.get(-1);
System.out.println("element -1: " + listInteger.get(-1));

Chạy chương trình, quan sát kết quả.

Hướng dẫn nộp bài:

–       Đưa mã nguồn lên GitHub

–       Dán link của repository lên phần nộp bài trên CodeGymX


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Leave a Reply

Your email address will not be published. Required fields are marked *