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
Đừng bỏ lỡ
  • Xây dựng hạ tầng cho mạng 5G tương lai của Việt Nam
    Đông Nam Á là một trong những khu vực có tốc độ phát triển nhanh nhất trên thế giới. Dự kiến tới năm 2030, ASEAN (gồm 10 quốc gia Đông Nam Á) sẽ trở thành nền kinh tế lớn thứ tư toàn cầu. Phần lớn động lực thúc đẩy sự phát triển này đến từ sự vận động và tăng trưởng không ngừng của nền kinh tế số trong khu vực, với giá trị ước tính lên đến gần 1 nghìn tỉ đô-la vào năm 2030.
  • 5G và những thay đổi toàn diện trong xây dựng thành phố thông minh
    Với tốc độ cực cao, độ trễ cực thấp, băng thông rộng và kết nối mật độ cực lớn, 5G là hạ tầng cốt lõi hỗ trợ toàn diện cho sự đổi mới và phát triển của thành phố thông minh trên tất cả các lĩnh vực, tác động tích cực vào công tác xây dựng và quản lý thành phố, tạo ra một môi trường sống tiện nghi, bền vững và an toàn hơn bao giờ hết.
  • Vượt qua hơn 1.000 doanh nghiệp, Bưu điện Việt Nam đạt giải Thương hiệu Quốc gia 2024
    Đây là lần thứ 2 liên tiếp Bưu điện Việt Nam vinh dự nhận giải thưởng danh giá này bởi những thành tựu lớn trong lĩnh vực logistics, bưu chính chuyển phát tại Việt Nam và Quốc tế.
  • Cuộc đua trung tâm dữ liệu AI tại Đông Nam Á
    Trí tuệ nhân tạo (AI) đã trở thành một động lực chính thúc đẩy đổi mới công nghệ toàn cầu và Đông Nam Á đang ngày càng khẳng định vai trò của mình trong cuộc đua phát triển AI. Hàng loạt các hãng công nghệ và đám mây lớn đã thông báo kế hoạch xây dựng, vận hành trung tâm dữ liệu mới tại Đông Nam Á.
  • Mở rộng trông xe không dùng tiền mặt mang lại lợi ích "kép"
    Việc áp dụng hình thức thanh toán qua ứng dụng thu phí không dừng VETC và mã QR vào hoạt động thanh toán phí gửi xe không dùng tiền mặt không những góp phần từng bước hình thành hệ thống giao thông thông minh mà còn tăng cường công tác quản lý nhà nước, minh bạch trong công tác thu phí dịch vụ trông giữ xe.
  • 10 xu hướng định hình tương lai của quản lý giao dịch số
    Quản lý giao dịch số đang phát triển mạnh mẽ, được thúc đẩy bởi những tiến bộ công nghệ và nhu cầu ngày càng tăng về xử lý tài liệu an toàn, hiệu quả. Đây là công cụ quan trọng giúp doanh nghiệp giảm bớt thủ tục hành chính và tối ưu hóa quy trình xử lý tài liệu số.
  • Zalo giữ vững ngôi đầu nền tảng nhắn tin được yêu thích nhất
    Ngày 5/11, theo báo cáo “The Connected Consumer Q.III/2024” mới nhất do Decision Lab công bố, Zalo tiếp tục dẫn đầu các nền tảng nhắn tin tại Việt Nam về tỷ lệ sử dụng (renetration rate) và mức độ yêu thích (preference rate).
  • Triển vọng thị trường chữ ký số toàn cầu
    Thị trường chữ ký số toàn cầu đang có ​​sự tăng trưởng chưa từng có khi các doanh nghiệp và cá nhân ngày càng áp dụng các giải pháp số để xác thực tài liệu và giao dịch an toàn.
  • ĐMST mở xã hội mang lại cho 90% doanh nghiệp cơ hội tạo giá trị kinh doanh bền vững
    Theo bà Nguyễn Phương Linh, Viện trưởng Viện MSD, hơn 90% các doanh nghiệp cho rằng đổi mới sáng tạo (ĐMST) mở xã hội mang lại cho doanh nghiệp cơ hội tạo ra giá trị kinh doanh bền vững, tác động tích cực đến xã hội và môi trường.
  • ‏FPT đẩy mạnh phát triển giải pháp low-code tại thị trường Hàn Quốc‏
    ‏Mới đây, FPT vừa ký kết thỏa thuận hợp tác ba năm với OutSystems, chính thức trở thành đối tác phân phối và triển khai tại thị trường Hàn Quốc, đảm bảo thời gian ra mắt phần mềm của khách hàng được rút ngắn và tối ưu chi phí.
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