Java 中的双向链表
Hiten Kanwar
2023年10月12日
在链表中,每个元素都作为一个单独的对象,具有数据部分和地址部分。它不使用具有传染性的内存位置来存储数据。双向链表存储前一个节点和下一个节点的地址。具有两个地址节点允许双向链表在两个方向上遍历。
本教程将讨论 Java 中的链表。
在 Java 中,链表类是 Java 集合框架的一部分,它提供链表数据结构的功能,充当双向链表。
这里的每个元素都充当一个节点,由 3 个值组成,即 Prev
、Next
和 Data
,位于一个位置。Prev
存储前一个元素的地址,Next
存储下一个元素的地址,而 Data
存储节点的实际数据。
例如,
import java.util.*;
public class ABC {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("apple");
fruits.add("orange");
fruits.add("mango");
System.out.println("LinkedList: " + fruits);
}
}
输出:
LinkedList: [apple, orange, mango]
在上面的例子中,我们已经通过 Java 的 Collections 框架成功创建了一个 Linked List。
在这里,第一个节点的数据为 apple
,它的前一个节点为空值,其后节点为橙色地址。类似地,数据为 orange
的第二个元素的前一个地址是 apple,下一个是 mango
的地址。
每当添加新元素时,Prev
和 Next
地址都会在内部自动更新。
get()
方法用于访问链表中的元素,链表从头到元素进行迭代。我们还有 listIterator()
方法来访问组件。next()
和 previous()
函数可以帮助在两个方向上遍历列表。
此外,我们可以使用 set()
方法来更改链接列表元素。remove()
函数可以删除一个元素。
我们在以下示例中使用其中一些函数。
import java.util.*;
public class ABC {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("apple");
fruits.add("orange");
fruits.add("mango");
String str = fruits.listIterator(1).previous();
System.out.println("i like " + str);
}
}
输出:
i like apple
在上面的例子中,我们使用 previous()
函数访问了索引 1 处元素之前的值。
我们还可以使用数据和指针变量创建我们的类来模拟 Java 中的双向链表。