Rumah >Java >javaTutorial >Senario aplikasi penutupan Java dalam struktur data dan algoritma
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;
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.
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); }
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; };
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.
rreeeeAtas 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!