LeetCode刷题常见的Java排序

1. 字符串排序(字母排序)

首先,你的代码实现了根据字母表顺序对字符串中的字母进行排序,忽略了大小写并且保留了非字母字符的位置。关键点是:

  • 提取和排序字母 :通过 Character.isLetter() 判断是否为字母,并利用 Character.toLowerCase() 来忽略大小写进行排序。
  • 保留非字母字符位置 :通过使用 StringBuilder,非字母字符保持原位,而排序的字母字符填充到原字母位置。

2. 整数排序(按升序或降序排序)

如果我们要对一个包含整数的列表进行排序,可以通过 Collections.sort()Arrays.sort() 来实现。这些方法对原始数据类型(如整数、浮点数)也适用。

例如,以下是对整数进行升序排序的例子:

java 复制代码
import java.util.*;

public class IntegerSort {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(10, 1, 5, 8, 3);
        
        // 升序排序
        Collections.sort(numbers);
        System.out.println("升序排序: " + numbers);

        // 降序排序
        Collections.sort(numbers, Collections.reverseOrder());
        System.out.println("降序排序: " + numbers);
    }
}
  • 升序排序Collections.sort() 将整数按照从小到大的顺序排序。
  • 降序排序Collections.reverseOrder() 提供了降序排序。

3. 自定义排序规则

你可以为各种类型(字符串、整数等)定义自定义排序规则,通过实现 Comparator 来实现。比如,按某种复杂规则排序的例子:

java 复制代码
import java.util.*;

public class CustomSort {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "Banana", "cherry", "date");
        
        // 按照字母长度排序(升序)
        words.sort(Comparator.comparingInt(String::length));
        System.out.println("按长度排序: " + words);
    }
}

这里我们使用了 Comparator.comparingInt() 来根据字符串的长度排序。

4. 浮动类型的排序(例如:浮点数)

类似于整数和字符串,浮点数(floatdouble)也可以使用 Arrays.sort()Collections.sort() 进行排序。这里需要特别注意浮点数的比较,由于精度问题,有时会存在 NaN 或无限大值的特殊情况。

java 复制代码
import java.util.*;

public class FloatSort {
    public static void main(String[] args) {
        List<Double> numbers = Arrays.asList(10.5, 1.1, 5.3, 8.8, 3.9);
        
        // 升序排序
        Collections.sort(numbers);
        System.out.println("浮动类型升序排序: " + numbers);

        // 降序排序
        Collections.sort(numbers, Collections.reverseOrder());
        System.out.println("浮动类型降序排序: " + numbers);
    }
}

5. 对对象进行排序(按多个字段排序)

在处理自定义对象时,我们可以通过实现 Comparable 接口或使用 Comparator 来实现多条件排序。例如,假设我们有一个 Person 类,并且需要根据 年龄姓名 进行排序:

java 复制代码
import java.util.*;

class Person {
    String name;
    int age;
    
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return name + " (" + age + ")";
    }
}

public class ObjectSort {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
                new Person("Alice", 30),
                new Person("Bob", 25),
                new Person("Charlie", 30),
                new Person("Dave", 20)
        );
        
        // 按年龄排序,如果年龄相同,则按姓名排序
        people.sort(Comparator.comparingInt(Person::age).thenComparing(Person::name));
        System.out.println("按年龄和姓名排序: " + people);
    }
}

6. 稳定排序

在你原来的代码中,提到 "同一字母的大小写同时存在时,按照输入顺序排列" 。这就要求你使用 稳定排序 ,即在排序过程中,若两个元素相等,排序后它们的相对顺序保持不变。Java 中的 Arrays.sort()Collections.sort() 默认使用稳定排序(Timsort 算法)。

7. 按特殊规则排序

除了普通的升降序排序,你还可以根据特定的条件进行排序。例如,你可以按字符串的最后一个字母、字符串中某个特定位置的字符等进行排序。

java 复制代码
import java.util.*;

public class SpecialSort {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date");
        
        // 按照每个字符串的最后一个字母排序
        words.sort(Comparator.comparingInt(word -> word.charAt(word.length() - 1)));
        System.out.println("按最后一个字母排序: " + words);
    }
}

总结

你所提供的字符串排序技巧实际上是一种 自定义排序规则 的实现。在不同的数据类型中,类似的技巧可以用来进行排序,特别是当排序需求复杂或者涉及多个条件时,使用 ComparatorComparable 接口来控制排序行为非常重要。常见的排序技巧总结如下:

  • 字符串排序:按字母表排序(忽略大小写)。
  • 数字排序:整数、浮动类型按升序或降序排序。
  • 对象排序:可以按多个字段、多个条件进行排序。
  • 稳定排序:确保排序后相等元素的顺序保持不变。
  • 自定义排序:例如按特定位置的字符或元素进行排序。
相关推荐
小咕聊编程1 小时前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
追逐时光者7 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_7 小时前
敏捷开发流程-精简版
前端·后端
苏打水com8 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧9 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧9 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧9 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧9 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧9 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng10 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端