Rumah  >  Artikel  >  Java  >  Senario aplikasi penutupan Java dalam struktur data dan algoritma

Senario aplikasi penutupan Java dalam struktur data dan algoritma

WBOY
WBOYasal
2024-05-02 14:51:021099semak imbas

Penutupan digunakan secara meluas dalam penyongsangan senarai terpaut, traversal struktur pokok dan pengaturcaraan dinamik dalam struktur data dan algoritma. Dengan mengakses dan mengubah suai pembolehubah skop luar, penutupan mengelakkan risiko limpahan timbunan rekursif apabila membalikkan senarai terpaut apabila melintasi struktur pokok dalam pengaturcaraan dinamik, penutupan dihantar kepada rekursi sebagai parameter memo Berfungsi untuk menyimpan hasil perantaraan;

Java 闭包在数据结构和算法中的应用场景

Senario aplikasi penutupan Java dalam struktur data dan algoritma

Penutupan ialah ciri bahasa pengaturcaraan penting yang membolehkan fungsi mengakses dan mengubah suai pembolehubah yang ditakrifkan dalam skop luar. Ini menjadikan penutupan berkuasa dalam struktur data dan algoritma.

1. Pembalikan Senarai Terpaut

Salah satu penyelesaian biasa untuk membalikkan senarai terpaut ialah menggunakan penutupan. Ia boleh membalikkan elemen senarai terpaut dengan berkesan sambil mengelakkan risiko limpahan tindanan yang disebabkan oleh penggunaan rekursi.

public class Node {
    int val;
    Node next;

    public Node(int val) {
        this.val = val;
    }
}

public static Node reverseList(Node head) {
    Node newHead = null;

    // 闭包函数,负责更新新链表指向
    Function<Node, Node> reverse = (prev) -> {
        if (head == null) {
            return prev;
        }

        Node next = head.next;
        head.next = prev;
        head = next;

        return reverse.apply(head);
    };

    return reverse.apply(newHead);
}

2. Traversal struktur pokok

Penutupan boleh digunakan untuk mencipta iterator tersuai untuk melintasi struktur pokok, seperti traversal prapesanan, traversal tertib dan traversal pasca pesanan.

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }
}

// 前序遍历
Function<TreeNode, List<Integer>> preOrder = (root) -> {
    if (root == null) {
        return Collections.emptyList();
    }

    List<Integer> result = new ArrayList<>();
    result.add(root.val);
    result.addAll(preOrder.apply(root.left));
    result.addAll(preOrder.apply(root.right));

    return result;
};

3. Pengaturcaraan Dinamik

Mod memo dalam algoritma pengaturcaraan dinamik dengan berkesan boleh menyimpan hasil perantaraan dan mengelakkan pengiraan berulang. Antaranya, penutupan boleh digunakan untuk menghantar memo sebagai parameter kepada fungsi rekursif.

rreeee

Atas ialah kandungan terperinci Senario aplikasi penutupan Java dalam struktur data dan algoritma. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn