目录
链表
// 创建一个LinkedList对象
LinkedList<String> linkedList = new LinkedList<>();
// 用add()方法添加元素到链表末尾
linkedList.add("Alice");
linkedList.add("Bob");
linkedList.add("Charlie");
System.out.println("链表中的元素有:" + linkedList);
// 用addFirst()和addLast()方法添加元素到链表头部和尾部
linkedList.addFirst("David");
linkedList.addLast("Emma");
System.out.println("添加头尾元素后,链表中的元素有:" + linkedList);
// 用get()方法获取指定位置的元素(从0号位置开始数)
String thirdElement = linkedList.get(2);
System.out.println("链表中的第三个元素是:" + thirdElement);
// 用remove()方法删除指定位置的元素
String removedElement = linkedList.remove(1);
System.out.println("已删除的元素是:" + removedElement);
System.out.println("删除元素后,链表中的元素有:" + linkedList);
// 用size()方法获取链表长度
int size = linkedList.size();
System.out.println("链表的长度是:" + size);
// 用isEmpty()方法判断链表是否为空
boolean isEmpty = linkedList.isEmpty();
System.out.println("链表是否为空:" + isEmpty);
队列
// 创建一个LinkedList对象,保存为Queue接口类型
Queue<Integer> queue = new LinkedList<>();
// 用add()方法添加元素到队列尾部
queue.add(1);
queue.add(2);
queue.add(3);
// 用remove()方法删除元素并返回其值
int removedElement = queue.remove();
System.out.println("已删除的元素是:" + removedElement);
// 用element()方法获取队头元素但不删除
int headElement = queue.element();
System.out.println("当前队头元素是:" + headElement);
// 遍历队列中的元素
System.out.print("队列中的元素有:");
for (int element : queue) {
System.out.print(element + " ");
}
// 用poll()方法删除队头元素并返回其值
int pollElement = queue.poll();
System.out.println("\n已删除的元素是:" + pollElement);
优先队列
`PriorityQueue` 是 Java 中的一个实现了优先队列(priority queue)的类,它基于优先级堆(priority heap)实现。以下是 `PriorityQueue` 类中一些常用的方法:
1. **add(E e) / offer(E e):**
将指定的元素插入到此优先队列。
PriorityQueue<String> pq = new PriorityQueue<>();
pq.add("element1");
pq.offer("element2");
2. **remove(Object o):**
从队列中删除指定的元素。
pq.remove("element1");
3. **poll():**
检索并删除队列的头,即具有最高优先级的元素。
String element = pq.poll();
4. **peek():**
检索但不删除队列的头,即具有最高优先级的元素。
String element = pq.peek();
5. **size():**
返回队列中的元素数量。
int size = pq.size();
6. **isEmpty():**
如果队列为空,则返回 `true`,否则返回 `false`。
boolean isEmpty = pq.isEmpty();
7. **clear():**
从队列中移除所有元素。
pq.clear();
优先队列写比较器
方法一 实现 Comparator
接口
import java.util.Comparator;
public class ListNodeComparator implements Comparator<ListNode> {
@Override
public int compare(ListNode a, ListNode b) {
return a.val - b.val;
}
}
方法二 使用 Lambda 表达式
PriorityQueue<ListNode> pq = new PriorityQueue<>((a, b) -> a.val - b.val);
在这两种方法中,比较器的 compare
方法返回一个负数、零或正数,分别表示第一个参数小于、等于或大于第二个参数。在这个例子中,按照 ListNode
的 val
属性进行升序排序。
Lambda 表达式通常在比较器简单且只在一个地方使用时更方便,而实现
Comparator
接口则适用于更复杂的比较器逻辑或在多个地方重复使用的情况。
栈
// 创建一个Stack对象
Stack<String> stack = new Stack<>();
// 用push()方法向栈顶添加元素
stack.push("Alice");
stack.push("Bob");
stack.push("Charlie");
System.out.println("栈中的元素有:" + stack);
// 用peek()方法获取栈顶元素但不弹出
String topElement = stack.peek();
System.out.println("当前栈顶元素是:" + topElement);
// 用pop()方法弹出栈顶元素
String popedElement = stack.pop();
System.out.println("已弹出的元素是:" + popedElement);
System.out.println("弹出元素后,栈中的元素有:" + stack);
// 用search()方法查找元素在栈中的位置(栈底是1)
int position = stack.search("Alice");
System.out.println("元素\"Alice\"在栈中的位置是:" + position);
// 用isEmpty()方法判断栈是否为空
boolean isEmpty = stack.isEmpty();
System.out.println("栈是否为空:" + isEmpty);