Java语言Leetcode中常用的一些基础语法

Java语言Leetcode中常用的一些基础语法

字符串

1. String 类常见属性和方法

String 类是不可变的,主要用于处理不可修改的字符串。

常见方法
方法名称说明
length()返回字符串的长度(字符数)。
charAt(int index)返回指定位置的字符。
substring(int start)返回从指定位置开始到字符串结尾的子字符串。
substring(int start, int end)返回从 startend 的子字符串。
equals(Object obj)判断两个字符串是否相等(比较内容)。
equalsIgnoreCase(String str)判断两个字符串是否相等(忽略大小写)。
contains(CharSequence sequence)判断字符串是否包含指定的子字符串。
indexOf(String str)返回指定子字符串首次出现的位置(如果没有返回 -1)。
lastIndexOf(String str)返回指定子字符串最后一次出现的位置。
replace(char oldChar, char newChar)替换指定字符。
replaceAll(String regex, String replacement)替换所有匹配正则表达式的子字符串。
toLowerCase()将字符串中的所有字符转换为小写字母。
toUpperCase()将字符串中的所有字符转换为大写字母。
trim()去除字符串两端的空白字符。
split(String regex)根据正则表达式将字符串拆分为多个子字符串,并返回一个数组。
concat(String str)将指定字符串追加到当前字符串的末尾。
isEmpty()判断字符串是否为空(即长度为 0)。
matches(String regex)判断字符串是否与正则表达式匹配。

2. StringBuffer 类常见属性和方法

StringBuffer 类是可变的,适用于需要频繁修改字符串的场景(如拼接、插入、删除等)。它是线程安全的,但性能较 StringBuilder 略低。

常见方法
方法名称说明
append(String str)将指定的字符串添加到当前 StringBuffer 的末尾。
insert(int offset, String str)在指定位置插入字符串。
delete(int start, int end)删除从 startend 索引之间的字符。
deleteCharAt(int index)删除指定位置的单个字符。
replace(int start, int end, String str)将指定范围内的字符替换为指定字符串。
reverse()反转 StringBuffer 中的字符顺序。
capacity()返回 StringBuffer 的容量,即底层字符数组的大小。
length()返回当前字符序列的长度。
charAt(int index)返回指定位置的字符。
setLength(int newLength)设置 StringBuffer 的长度。如果长度大于当前长度,填充空白;如果小于当前长度,截断字符。
toString()StringBuffer 转换为字符串。

栈与队列

在Java中,栈通常可以通过 java.util.Stack 类来实现。Stack 类继承自 Vector 类,提供了栈特有的操作方法。
栈是一种 后进先出(LIFO, Last In, First Out)结构。栈中的元素按顺序排列,最后加入的元素最先被移除。栈的典型操作包括:

  • push:将元素推入栈顶。
  • pop:移除栈顶元素。
  • peek:查看栈顶元素,但不移除它。
  • isEmpty:检查栈是否为空。

队列

在Java中,队列是通过 java.util.Queue 接口定义的,并有多个实现类。常见的实现类有:

  • LinkedList:最常用的队列实现之一,它实现了 Queue 接口,因此提供了队列操作方法。
  • PriorityQueue:一种基于优先级堆实现的队列,其中的元素是按自然顺序排序或由提供的比较器进行排序的。

常见的队列操作有:

offer(E e):将元素插入队列末尾。如果队列能够接受此元素,则返回 true,否则返回 false。
poll():移除并返回队列头部的元素。如果队列为空,则返回 null。
peek():返回队列头部的元素但不移除它。如果队列为空,则返回 null。
isEmpty():检查队列是否为空。
size():返回队列中的元素个数。

在Java中,优先级队列(PriorityQueue)是基于优先级堆实现的队列,元素按照自然顺序或自定义的比较器排序。默认情况下,PriorityQueue 会使用元素的 自然排序(即实现了 Comparable 接口的对象)。但是,如果你需要自定义排序规则,可以通过传入一个比较器(Comparator)来控制元素的顺序。

import java.util.PriorityQueue;
import java.util.Comparator;

class Student {
    String name;
    int score;

    Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    @Override
    public String toString() {
        return name + ": " + score;
    }
}

public class PriorityQueueWithComparator {
    public static void main(String[] args) {
        // 自定义一个Comparator,按学生的分数降序排序
        Comparator<Student> byScoreDescending = new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                return Integer.compare(s2.score, s1.score); // 分数高的优先
            }
        };

        // 创建优先级队列,并传入自定义的比较器
        PriorityQueue<Student> queue = new PriorityQueue<>(byScoreDescending);

        // 向队列中添加学生
        queue.add(new Student("Alice", 90));
        queue.add(new Student("Bob", 85));
        queue.add(new Student("Charlie", 95));

        // 打印队列中的学生
        while (!queue.isEmpty()) {
            System.out.println(queue.poll()); // 按照分数从高到低打印学生
        }
    }
}

在Java中,双端队列(Deque, Double-Ended Queue)是一种队列,它允许从两端插入和移除元素。Deque 接口继承自 Queue 接口,并提供了更多的操作方法,使得可以从队列的两端进行元素的添加和删除。

Deque 接口
Deque 接口定义了双端队列的基本操作,包括:

  • addFirst(E e):将元素添加到队列的头部。
  • addLast(E e):将元素添加到队列的尾部。
  • removeFirst():移除并返回队列头部的元素。
  • removeLast():移除并返回队列尾部的元素。
  • getFirst():获取队列头部的元素,但不移除它。
  • getLast():获取队列尾部的元素,但不移除它。
  • offerFirst(E e):将元素插入队列头部,如果队列没有容量,则返回 false。
  • offerLast(E e):将元素插入队列尾部,如果队列没有容量,则返回 false。
  • pollFirst():移除并返回队列头部的元素,如果队列为空,返回 null。
  • pollLast():移除并返回队列尾部的元素,如果队列为空,返回 null。

类型转换

字符串与字符数组的转换

  1. 字符串转字符数组
    可以通过 String 的 toCharArray() 方法将字符串转换为字符数组。

    String str = "hello";
    char[] charArray = str.toCharArray();
    
  2. 字符数组转字符串
    可以通过 String 构造函数将字符数组转换为字符串。

    char[] charArray = {'h', 'e', 'l', 'l', 'o'};
    String str = new String(charArray);
    

数组与 List 的转换

  1. 数组转 List
    可以使用 Arrays.asList() 方法将数组转换为 List。但是要注意,使用 Arrays.asList() 返回的 List 是固定大小的,不支持增加或删除元素。

    String[] array = {"apple", "banana", "cherry"};
    List<String> list = Arrays.asList(array);
    

    对于基本类型数组(如 int[]),需要转换为对应的包装类类型(如 Integer[]):

    int[] arr = {1, 2, 3, 4};
    List<Integer> list = Arrays.stream(arr)  // 将int[]转为Stream
                                .boxed()     // 转换为Stream<Integer>
                                .collect(Collectors.toList());
    
    
  2. List 转数组:
    不管是List转数组还是数组转list都可以用for循环赋值实现。

list.toArray(new int[list.size()][])

排序

在 Java 中,排序列表(List)通常通过 Collections.sort() 或 List.sort() 方法实现。

使用 Collections.sort()

Collections.sort() 方法是 Java 中最常用的排序方法之一。它按照元素的自然顺序对列表进行排序。该方法是基于归并排序(MergeSort)实现的,因此具有 O(n log n) 的时间复杂度。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortListExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(5);
        list.add(2);
        list.add(8);
        list.add(1);
        
        // 排序列表
        Collections.sort(list);
        
        // 打印排序后的列表
        System.out.println(list);  // 输出: [1, 2, 5, 8]
    }
}

使用 List.sort()

List.sort() 是 Java 8 引入的另一种排序方法,它是 List 接口的方法,接受一个 Comparator。它可以用于自定义排序规则。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class ListSortExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(5);
        list.add(2);
        list.add(8);
        list.add(1);
        
        // 使用 List.sort() 和自定义比较器进行排序
        list.sort(Comparator.reverseOrder());  // 按降序排序
        
        // 打印排序后的列表
        System.out.println(list);  // 输出: [8, 5, 2, 1]
    }
}

自定义对象排序

对于自定义对象(如类的实例),可以通过实现 Comparable 接口来定义排序规则,或者通过传递自定义的 Comparator 对象来控制排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Person implements Comparable<Person> {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Person other) {
        return Integer.compare(this.age, other.age);  // 按年龄升序排序
    }

    @Override
    public String toString() {
        return name + ": " + age;
    }
}

public class PersonSortExample {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("Alice", 30));
        list.add(new Person("Bob", 25));
        list.add(new Person("Charlie", 35));
        
        // 使用 Collections.sort() 按年龄排序
        Collections.sort(list);
        
        // 打印排序后的列表
        System.out.println(list);  // 输出: [Bob: 25, Alice: 30, Charlie: 35]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值