【java API】leetcode常用刷题API及ACM模式

文章目录

ACM输入 Scanner

```java
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据

        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        scan.close();
    }
}

```

$ javac ScannerDemo.java
$ java ScannerDemo
next方式接收:
runoob com
输入的数据为:runoob

可以看到 com 字符串并未输出

使用 nextLine 方法:

```java
 // 判断是否还有输入
        if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str2);
        }

```

runoob com
输入的数据为:runoob com

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

以下是针对ACM模式刷题时,字符串和集合相关的高频Java API总结(按使用频率排序):


一、字符串高频API

  1. String类

    ```java
    String str = "abc";
    // 基础操作
    str.length() // 字符串长度
    str.charAt(int index) // 获取字符(高频)
    str.substring(int start) // 截取子串(含start)
    str.substring(int start, int end) // 截取[start,end)
    str.split(String regex) // 分割字符串(高频,如处理输入)
    str.toCharArray() // 转字符数组(高频用于遍历)
    str.equals(String other) // 比较内容(非地址)
    str.indexOf(String s) // 查找子串位置

    // 类型转换
    Integer.parseInt(str) // 字符串转整数(高频)
    String.valueOf(int/double...) // 其他类型转字符串(高频)
    str.toLowerCase() / toUpperCase() // 大小写转换

    // 其他
    str.trim() // 去除首尾空格
    str.replace(old, new) // 替换字符/字符串
    str.contains(String s) // 是否包含子串

    ```

  2. StringBuilder(高频!线程不安全但更快)

    ```java
    StringBuilder sb = new StringBuilder();
    sb.append("a") // 追加内容(高频)
    sb.insert(index, "x") // 插入
    sb.delete(start, end) // 删除
    sb.reverse() // 反转(高频用于回文题)
    sb.toString() // 转String(最终输出)

    ```

  3. Character

    ```java
    Character.isLetter()
    Character.toLowerCase()

    ```


二、集合高频API

  1. List(ArrayList最常用)

    ```java
    List list = new ArrayList<>();
    // 基础操作
    list.add(element) // 添加元素(高频)
    list.get(int index) // 获取元素(高频)
    list.size() // 元素个数(高频)
    list.remove(int index) // 按索引删除
    list.remove(Object o) // 按对象删除
    list.contains(Object o) // 是否包含元素
    list.isEmpty() // 判空

    // 工具方法
    Collections.sort(list) // 排序(高频)
    Collections.reverse(list) // 反转
    Collections.max(list) / min(list) // 最大/最小值
    Collections.fill(list, val) // 填充

    // 数组互转
    Arrays.asList(T... a) // 数组转List(注意返回固定大小List)
    list.toArray(new T[0]) // List转数组

    ```

  2. Map(HashMap最常用)

    ```java
    Map map = new HashMap<>();
    // 基础操作
    map.put(key, value) // 添加/覆盖键值对(高频)
    map.get(key) // 获取值(高频)
    map.containsKey(key) // 是否包含键(高频)
    map.getOrDefault(key, defaultValue) // 安全获取
    map.remove(key) // 删除键
    map.size() // 键值对数量

    // 遍历(高频)
    for (Map.Entry entry : map.entrySet())

    //PriorityQueue(优先队列)
    PriorityQueue> pq = new PriorityQueue<>(
    (a, b) -> b.getValue() - a.getValue()
    );
    pq.addAll(map.entrySet());

    ```

以下是栈(Stack)和链表(LinkedList)在ACM模式刷题时的高频Java API总结,包含核心操作和避坑指南:


三、栈(Stack)高频API

1. 推荐用Deque替代Stack(更高效且线程不安全,适合算法场景)
```java
Deque stack = new ArrayDeque<>();

```
2. 核心操作
方法 说明 示例
push(e) 入栈 stack.push(5);
pop() 出栈( 空栈会抛异常 int top = stack.pop();
peek() 查看栈顶元素(不删除) int top = stack.peek();
isEmpty() 判断栈是否为空 if (stack.isEmpty()) {...}
size() 获取元素个数 int len = stack.size();
3. 经典应用场景
  • 括号匹配 :用栈存储左括号,遇到右括号时弹栈匹配
  • 单调栈 :维护栈内元素单调性(递增/递减)
  • 表达式求值 :处理运算符优先级
4. 避坑指南
  • 空栈检查pop()peek()前必须检查栈是否为空,否则会抛出NoSuchElementException
  • 性能对比 :优先用ArrayDeque而非Stack类(后者同步操作性能差)

四、链表(LinkedList)高频API

1. 内置LinkedList
```java
LinkedList list = new LinkedList<>();

```
2. 核心操作
方法 说明 时间复杂度
addFirst(e) 头部插入元素 O(1)
addLast(e) 尾部插入元素 O(1)
removeFirst() 删除头部元素( 空链表抛异常 O(1)
removeLast() 删除尾部元素( 空链表抛异常 O(1)
getFirst() 获取头部元素(不删除) O(1)
getLast() 获取尾部元素(不删除) O(1)
get(int index) 获取第index个元素( 低效,慎用 O(n)
size() 获取链表长度 O(1)
3. 自定义链表节点 (LeetCode常用)
```java
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
// 操作示例:反转链表
ListNode dummy = new ListNode(-1);
while (head != null) {
    ListNode next = head.next;
    head.next = dummy.next;
    dummy.next = head;
    head = next;
}
return dummy.next;

```
4. 经典应用场景
  • 链表反转 :迭代或递归修改指针指向
  • 合并有序链表 :双指针遍历比较
  • 快慢指针 :检测环、找中点(如判断回文链表)
  • 虚拟头节点 :简化头节点边界处理
5. 避坑指南
  • 指针丢失 :修改链表节点指针时,注意提前保存next节点
  • 循环引用 :操作链表后注意检查是否成环
  • 性能陷阱 :避免频繁调用get(index)(链表随机访问是O(n))

五、实用代码片段

1. 用栈实现队列
```java
class MyQueue {
    Deque inStack = new ArrayDeque<>();
    Deque outStack = new ArrayDeque<>();

    public void push(int x) {
        inStack.push(x);
    }

    public int pop() {
        if (outStack.isEmpty()) {
            while (!inStack.isEmpty()) {
                outStack.push(inStack.pop());
            }
        }
        return outStack.pop();
    }
}

```
2. 快慢指针找链表中点
```java
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
    slow = slow.next;       // 慢指针走1步
    fast = fast.next.next;  // 快指针走2步
}
// slow即为中点(偶数个节点时靠左)

```

掌握这些API和技巧后,可以高效解决栈和链表相关的算法题,注意边界条件和指针操作的细节!

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/9552.html

(0)
LomuLomu
上一篇 2025 年 5 月 13 日 下午1:08
下一篇 2025 年 5 月 13 日

相关推荐

  • Java编程进阶指南——深入理解类与对象的核心概念⑦

    Java编程进阶指南📚——深入理解类与对象的核心概念⑦ 一、面向对象编程基础 1.1 面向对象编程的本质 Java作为纯粹的面向对象编程语言(OOP),其核心理念是将现实世界中的事物抽象为程序中的对象。这种编程范式强调通过对象之间的协作来解决问题。面向对象编程的优势:- 更贴近人类思维方式- 便于构建复杂的软件系统- 提升代码的可扩展性和维护性- 通过对象协…

    2025 年 5 月 19 日
    29100
  • 2024年主流使用的JDK版本及其核心特性介绍

    原文全文详见个人博客:https://www.coderli.com/feature-of-popular-jdk-version/2024年主流使用的JDK版本及其核心特性介绍在群里交流的时候,经常遇到不同同学使用的JDK版本五花八门,并且很多不知道其使用版本的特点。作为Java开发者,理解不同JDK版本的核心特性和优势不仅能提高我们的开发效率,还能帮助我…

    2024 年 12 月 28 日
    76500
  • 微软开源!Office 文档轻松转 Markdown!

    大家好,我是 Java陈序员。 今天,给大家介绍一款微软开源的文档转 Markdown 工具。 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 MarkItDown —— 微软开源的 Python 工具,能够将多种常见的文件格式(如 PDF、PowerPoint、Word、Excel、图像、音频…

    2025 年 1 月 12 日
    58600
  • JAVA 图形界面编程 AWT篇(1)

    前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界面(GUI)框架之一,主要用于构建桌面应用程序的图形界面。最初在 JDK 1.0 版本中作为 Java GUI 的核心库引入,旨…

    未分类 2025 年 1 月 11 日
    48100
  • 华为OD机试E卷 –英文输入法–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 JS算法源码 Java算法源码 python算法源码 c算法源码 c++算法源码 题目描述 主管期望你来实现英文输入法单词联想功能。需求如下:• 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,• 如果联想不到,请输出用户输入的单词前缀。 注意: 英文单词联想时,…

    未分类 2025 年 1 月 15 日
    62200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信