[Java基础]基本数据结构使用

本文介绍了Java中链表的创建、添加、删除和遍历操作,队列的基本使用,包括入队、出队以及查看队头元素,详细讲解了优先队列的概念及常用方法,并展示了如何自定义比较器。此外,还涵盖了栈的push、pop和搜索等操作。
摘要由CSDN通过智能技术生成

目录

链表

队列

优先队列

优先队列写比较器 

 栈


链表

        // 创建一个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 方法返回一个负数、零或正数,分别表示第一个参数小于、等于或大于第二个参数。在这个例子中,按照 ListNodeval 属性进行升序排序。

        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);

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值