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

Ngọc Huyền| 10/07/2019 19:47
Theo dõi ICTVietnam trên

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

Nổi bật Tạp chí Thông tin & Truyền thông
  • Báo chí quốc tế viết gì về Triển lãm Quốc phòng quốc tế Việt Nam 2024?
    Sự kiện Triển lãm Quốc phòng quốc tế Việt Nam năm 2024 thu hút sự chú ý trong - ngoài nước và cả nhiều cơ quan truyền thông quốc tế.
  • “AI như là một chiếc gương đen”
    Bài báo "AI is the Black Mirror" của Philip Ball cung cấp một cái nhìn chi tiết về trí tuệ nhân tạo (AI) và tác động của nó đến nhận thức con người.
  • Chất lượng thông tin báo chí về kinh tế - Vai trò, yêu cầu thước đo và giải pháp cần có
    Báo chí kinh tế cần là diễn đàn thực thụ cho doanh nghiệp, không chỉ cung cấp thông tin. Thông tin cần chính xác và kịp thời để hỗ trợ doanh nghiệp trong điều chỉnh chiến lược kinh doanh.
  • Những “ngọn đuốc” ở bản
    Ở Tuyên Quang, người có uy tín là những người đi đầu thay đổi nếp nghĩ, cách làm của bà con dân tộc thiểu số (DTTS). Họ như những “ngọn đuốc” đi trước, thắp sáng, lan tỏa tinh thần trách nhiệm, nêu gương với cộng đồng. Gương mẫu, uy tín, những người có uy tín đã và đang góp sức xây dựng bản làng, thôn xóm ngày càng ấm no, giàu mạnh.
  • 5 lý do để tăng cường bảo mật mạng
    Các chương trình an ninh mạng đã phát triển đáng kể trong vài thập kỷ qua. Sự ra đời của điện toán đám mây đã phá vỡ ranh giới an ninh mạng thông thường của của các doanh nghiệp, buộc các tổ chức phải liên tục cập nhật những chiến lược phòng thủ của mình.
Đừng bỏ lỡ
Cách tạo một danh sách tùy chỉnh với trình lặp thực hiện Java
POWERED BY ONECMS - A PRODUCT OF NEKO