0

Triển khai cấu trúc dữ liệu Mảng tùy chỉnh trong TypeScript

Bạn đang muốn hiểu sâu hơn về các cấu trúc dữ liệu trong TypeScript? Hãy cùng khám phá cách tạo ra một triển khai mảng tùy chỉnh vượt ra ngoài kiểu mảng có sẵn. Bài viết này sẽ hướng dẫn bạn xây dựng một lớp ArrayList mô phỏng một số chức năng của mảng nguyên thủy trong JavaScript.

Lớp ArrayList

Chúng ta sẽ bắt đầu bằng cách định nghĩa lớp ArrayList như sau:

class ArrayList<T> {
  private items: T[];
  private size: number;

  constructor() {
    this.items = [];
    this.size = 0;
  }

  // Methods will be implemented here
}

ArrayList được thiết kế theo kiểu generic, cho phép nó chứa bất kỳ kiểu dữ liệu nào T. Chúng ta sử dụng mảng riêng tư items để lưu trữ các phần tử và thuộc tính size để theo dõi số lượng phần tử hiện có.

Các thao tác cơ bản

Cùng triển khai một vài thao tác cơ bản với mảng:

1. Thêm phần tử

public add(element: T): void {
  this.items[this.size] = element;
  this.size++;
}

2. Lấy phần tử theo chỉ mục

public get(index: number): T {
  if (index < 0 || index >= this.size) {
    throw new Error("Index out of bounds");
  }
  return this.items[index];
}

3. Xóa phần tử

public remove(index: number): T {
  if (index < 0 || index >= this.size) {
    throw new Error("Index out of bounds");
  }
  const removedItem = this.items[index];
  for (let i = index; i < this.size - 1; i++) {
    this.items[i] = this.items[i + 1];
  }
  this.size--;
  return removedItem;
}

Tính năng bổ sung

Chúng ta sẽ thêm một số phương thức khác để tăng tính tiện dụng cho ArrayList:

4. Lấy kích thước

public getSize(): number {
  return this.size;
}

5. Kiểm tra rỗng

public isEmpty(): boolean {
  return this.size === 0;
}

6. Xóa toàn bộ phần tử

public clear(): void {
  this.items = [];
  this.size = 0;
}

Sử dụng ArrayList

Dưới đây là cách sử dụng lớp ArrayList tùy chỉnh của chúng ta:

const list = new ArrayList<number>();

list.add(1);
list.add(2);
list.add(3);

console.log(list.get(1)); // Output: 2
console.log(list.getSize()); // Output: 3

list.remove(1);
console.log(list.getSize()); // Output: 2
console.log(list.get(1)); // Output: 3

list.clear();
console.log(list.isEmpty()); // Output: true

Kết luận

Bằng cách tự triển khai lớp ArrayList, chúng ta đã có thêm cái nhìn sâu sắc về cách mảng hoạt động bên trong. Kiến thức này rất hữu ích khi tối ưu mã hoặc làm việc với các cấu trúc dữ liệu phức tạp hơn.

Hãy nhớ rằng, mặc dù triển khai này mang tính giáo dục, nhưng các mảng tích hợp sẵn trong TypeScript đã được tối ưu hóa rất tốt và nên được sử dụng trong phần lớn các trường hợp thực tế. Tuy nhiên, hiểu được những khái niệm này sẽ giúp bạn trở thành một lập trình viên TypeScript giỏi hơn.

Chúc bạn code vui vẻ!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.