Cách tạo một danh sách tùy chỉnh với trình lặp thực hiện Java

Xã hội số - Ngày đăng : 19:47, 10/07/2019

Trong bài viết này, các chuyên gia sẽ hướng dẫn bạn cách phát triển cấu trúc dữ liệu tùy chỉnh và cách tạo danh sách bằng Java.

Kết quả hình ảnh cho Creating a Custom List With Java Implementing Iterator.

Trước khi viết mã, các bạn cần hiểu một vài khái niệm.

List (Danh sách): Danh sách là cấu trúc dữ liệu đại diện cho việc thu thập hoặc sắp xếp dữ liệu (nodes) và mỗi node có con trỏ tới node tiếp theo. Điều đó có nghĩa là các node không thể được truy cập bởi chỉ mục. Hình ảnh bên dưới hiển thị một danh sách có ba phần tử (node) và con trỏ "First" (Đầu tiên) và "Last” (Cuối cùng) để có thể truy cập vào dữ liệu danh sách.

Linked List with three elements

Node: Node là một cấu trúc đại diện cho từng thành phần trong danh sách. Một node có ít nhất một con trỏ đến phần tử tiếp theo và trường chứa thông tin hoặc dữ liệu cụ thể. Trong một danh sách có một phần tử, con trỏ đầu tiên và cuối cùng chỉ đến cùng một phần tử.

A Node

Next (Tiếp theo), Prev (Trước đó), First (Đầu tiên), Last (Cuối cùng): Đây là những con trỏ cho phép truy cập vào các node trong danh sách.

Empty List (Danh sách trống): Một danh sách không có phần tử, các node "first" và "last" là null.

Empty List

Bắt đầu từ lớp Node


1 package app;

2

3 public class Node {

4    private Node next;

5    private Node prev;

6    private T data;

7

8 //getters and setters omited.. 

9}

Trong lớp Node, điều quan trọng cần làm nổi bật là việc sử dụng chung để truyền kiểu dữ liệu của node và làm cho danh sách có thể sử dụng lại.

Sau đó, chúng ta cần triển khai lớp CustomList:


1 package app;

2

3 import java.util.Iterator;

4

5 public class CustomList implements Iterable {

6    private Node first;

7    private Node last;

8   

9             public CustomList() {

10        first = last = null;

11   }

12

13    public boolean isEmpty(){

14        return first == null;

15    }

16 

17  public void push(T data) {

18        Node tempo = new Node();

19        tempo.setData(data);

20        tempo.setNext(null);

21

22       if (first == null) {

23            tempo.setPrev(null);

24            first = last = tempo;

25        } else {

26            tempo.setPrev(last);

27            last.setNext(tempo);

28            last = tempo;

29        }

30    }

31

32    @Override

33    public Iterator iterator() {

34        return new ListIterator(first);

35    }

36}

Lớp CustomList thực hiện Iterable, cho phép chúng ta sử dụng "for" với danh sách.

Trong bước tiếp theo, chúng ta sẽ tạo triển khai ListIterator của riêng mình:

1 package app;

2

3 import java.util.Iterator;

4

5 public class ListIterator implements Iterator {

6    private Node current;

7

8    public ListIterator(Node first) {

9        current = first;

10    }

11 

12  @Override

13    public boolean hasNext() {

14        return current != null;

15    }

16

17   @Override

18    public Node next() {

19        Node tempo = current;

20        current = current.getNext();

21        return tempo;

22    }   

23}

Cần phải vượt qua node đầu tiên của danh sách trong hàm tạo để truy cập nội dung của danh sách bằng cách sử dụng các con trỏ (tiếp theo, trước) tùy theo nhu cầu của bạn. Các bạn cũng phải tải các phương thức next () và hasNext ().

Cuối cùng, sử dụng lớp của mình để lưu trữ Person (Người) và Car (Xe):

1 package app;

2

3 public class App {

4    public static void main(String[] args) throws Exception {

5

6        CustomList list1 = new CustomList<>();

7

8        list1.push(new Person("Clark", "Kent", 35));

9        list1.push(new Person("Bruce", "Wayne", 40));

10        list1.push(new Person("Linda", "Carter", 30));

11 

12      for (Node node : list1) {

13            System.out.println(node.getData().toString());

14        }

15 

16      CustomList list2 = new CustomList<>();

17        list2.push(new Car(200, "Car 1"));

18        list2.push(new Car(100, "Car 2"));

19 

20      for (Node node : list2) {

21            System.out.println(node.getData().toString());

22        }       

23    }

24 }

Trong đoạn mã trên, bạn co thể nhận thấy rằng có thể lặp lại các danh sách với cấu trúc “for”.

Bài viết đã triển khai Danh sách tùy chỉnh của mình với Java bằng cách triển khai Iterator. Chúc các bạn thành công.a

Ngọc Huyền