🔎Deque(双端队列):
Deque 是 “double-ended queue” 的缩写,表示双端队列。它是一种可以在两端进行插入和删除操作的数据结构。你可以在队列的头部和尾部同时进行插入和删除操作。Deque 接口定义了这些操作的方法,如 addFirst、addLast、removeFirst、removeLast 等。Deque 接口的常见实现类有 ArrayDeque。
🌻实现方法:
addFirst(element):将指定元素插入双端队列的开头。
addLast(element):将指定元素插入双端队列的末尾。
removeFirst():检索并删除双端队列的第一个元素。
removeLast():检索并删除双端队列的最后一个元素。
peekFirst():检索但不删除双端队列的第一个元素。
peekLast():检索但不删除双端队列的最后一个元素。
🔎Queue:
Queue 是一种先进先出(FIFO)的数据结构,它定义了在一端插入元素,在另一端删除元素的操作。Queue 接口定义了这些操作的方法,如 offer、poll、peek 等。Queue 接口的常见实现类有 LinkedList 和 ArrayDeque。
🌻实现方法:
offer(element):将指定元素插入队列。
poll():检索并删除队列的第一个元素。
peek():检索但不删除队列的第一个元素。
🔎HashMap<Integer, Integer>:
HashMap 是 Java 中的一个散列表实现类,它实现了 Map 接口。HashMap 使用键值对的方式存储数据,可以通过键快速查找对应的值。在 HashMap 中,键和值都可以为任意对象,但在这个例子中,键和值都是整数类型。HashMap 具有高效的查找和插入操作,但不保证元素的顺序。
🌻实现方法:
put(key, value):将指定的值与指定的键关联起来。
get(key):检索与指定键关联的值。
remove(key):从HashMap中删除具有指定键的条目。
containsKey(key):如果HashMap包含指定的键,则返回true。
🔎Stack:
Stack 是 Java 中的栈数据结构实现类,它继承自 Vector 类。栈是一种后进先出(LIFO)的数据结构,它定义了在栈顶插入元素和删除栈顶元素的操作。在这个例子中,Stack 存储的元素类型为 TreeNode。
🌻实现方法:
push(element):将元素推入堆栈。
pop():从堆栈中移除并返回顶部的元素。
peek():返回堆栈顶部的元素,但不将其从堆栈中移除。
empty():如果堆栈为空,则返回true。
🔎ArrayList<>():
这是创建一个空的 ArrayList 对象的语法。通过该语法,可以实例化一个 ArrayList 对象用于存储元素。
🌻 实现方法:
ArrayList提供了类似动态数组的实现,支持方法如add(element)、remove(element/index)、get(index)、size()等。然而,在给出的示例中,并未指定使用的具体方法。
🔎LinkedList(链表):
链表是一种由节点组成的线性数据结构,每个节点都包含一个值和一个指向下一个节点的指针。
LinkedList内部使用双向链表实现,每个节点除了包含值之外,还包含指向前一个节点的指针。
由于LinkedList是双向链表,因此在任意位置插入和删除元素的时间复杂度为O(1)。
LinkedList支持快速的插入和删除操作,但访问元素的时间复杂度较高,为O(n),因为需要从头部或尾部开始遍历链表。
🔎ArrayList<>()与inkedList(链表)区别:
使用Queue queue = new LinkedList<>() 而不是 Queue queue = new ArrayList<>() 的原因是因为需要使用队列的特性,而LinkedList实现了Queue接口,是一个双端队列(Deque),适合用于实现队列的功能。
Queue接口是Java集合框架中定义的一种数据结构,它按照先进先出(FIFO)的原则管理元素。Queue提供了用于添加、删除和检查元素的方法,如offer()、poll()和isEmpty()。
LinkedList实现了Queue接口,并且在实现中使用双向链表来存储元素。它具有在队列的两端进行高效插入和删除操作的特性,因此非常适合用于实现队列。而ArrayList则是一个基于动态数组的实现,虽然也可以用于存储元素,但它的主要优势在于随机访问元素,而不是在队列中进行添加和删除操作。
🔎ArrayDeque(数组双端队列):
ArrayDeque是一种由可变大小数组实现的双端队列(即两端都可以进行插入和删除操作)。
ArrayDeque使用循环数组的方式存储元素,可以高效地在队列两端进行操作。
由于ArrayDeque使用数组实现,因此在随机访问元素时具有较快的速度,时间复杂度为O(1)。
ArrayDeque在添加和删除元素时具有较好的性能,时间复杂度为O(1)。
ArrayDeque不是线程安全的,如果需要在多线程环境中使用,可以考虑使用ConcurrentLinkedDeque。
🌻总结:
Deque 是一个具有队列和栈性质的双端队列。
ArrayDeque 是 Deque 接口的实现,底层使用数组实现的双端队列。
Queue 是一种先进先出的队列接口,定义了队列的基本操作。
HashMap 是一个哈希表实现的键值对存储容器。
new HashMap<>() 和 new Stack<>() 是创建空对象的语法。
Stack 是一个栈数据结构,遵循后进先出原则。
ArrayList 是一个动态数组实现的列表容器。