JAVA中的排序算法详解与实战

简介: JAVA中的排序算法详解与实战

一、引言

在Java编程中,排序算法是一个常见的需求,用于对数组、列表等数据结构中的元素按照某种规则进行排序。Java提供了多种排序算法的实现,包括内置的排序方法和自定义排序方法。本文将对Java中的排序算法进行详细介绍,并通过实战演练来加深理解。


二、Java内置排序方法

Java的java.util.Arrays类和java.util.Collections类分别提供了对数组和列表进行排序的方法。其中,Arrays.sort()和Collections.sort()是最常用的两个方法。

数组排序:Arrays.sort()

Arrays.sort()方法可以对基本数据类型的数组进行排序,如int、double等,也可以对对象数组进行排序,但要求对象实现Comparable接口。

示例代码:


import java.util.Arrays;
public class ArraySortDemo {
public static void main(String[] args) {
int[] arr = {5, 2, 9, 1, 5, 6};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 输出:[1, 2, 5, 5, 6, 9]
String[] strArr = {"apple", "banana", "orange", "pear"};
    Arrays.sort(strArr);
    System.out.println(Arrays.toString(strArr)); // 输出:[apple, banana, orange, pear]
}
}


列表排序:Collections.sort()

Collections.sort()方法可以对实现了List接口的列表进行排序,同样要求列表中的元素实现Comparable接口。

示例代码:


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListSortDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(9);
list.add(1);
Collections.sort(list);
System.out.println(list); // 输出:[1, 2, 5, 9]
List<String> strList = new ArrayList<>();
    strList.add("apple");
    strList.add("banana");
    strList.add("orange");
    strList.add("pear");
    Collections.sort(strList);
    System.out.println(strList); // 输出:[apple, banana, orange, pear]
}
}


三、自定义排序

当内置排序方法无法满足特定需求时,我们可以自定义排序方法。自定义排序通常通过实现Comparator接口或让对象实现Comparable接口来实现。

实现Comparator接口

示例代码:


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparatorDemo {
public static void main(String[] args) {
List people = new ArrayList<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 20));
people.add(new Person("Charlie", 30));
Collections.sort(people, new Comparator<Person>() {
        @Override
        public int compare(Person p1, Person p2) {
            return p1.getAge() - p2.getAge();
        }
    });
    for (Person person : people) {
        System.out.println(person.getName() + " " + person.getAge());
    }
}
}
class Person {
private String name;
private int age;
// 省略构造方法和getter/setter
}



实现Comparable接口

示例代码:

// 省略与ComparatorDemo相同的Person类,但Person类需要实现Comparable接口
class Person implements Comparable {
// ... 省略其他代码
@Override
public int compareTo(Person other) {
    return this.age - other.age;
}
}
// ComparatorDemo中的Collections.sort()调用改为直接使用Arrays.sort(people.toArray(new Person[0]));


四、排序算法的效率与选择

不同的排序算法具有不同的时间复杂度和空间复杂度。在实际应用中,我们应根据数据规模、数据特性、排序需求等因素来选择合适的排序算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。这些算法各有优缺点,例如冒泡排序简单但效率低,快速排序平均效率高但最坏情况下效率较低等。因此,在选择排序算法时,我们需要综合考虑各种因素,以达到最优的排序效果。

目录
相关文章
|
3月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
289 119
|
5月前
|
缓存 前端开发 Java
基于最新 Java 技术栈的在线任务管理系统开发实战详解
本项目基于最新Java技术栈开发在线任务管理系统,涵盖任务创建、分配、跟踪、统计等功能。采用Spring Boot 3.2.x、React 18、PostgreSQL 16等主流技术,详解项目架构设计、核心功能实现及部署流程,助力掌握现代Java全栈开发技能。
339 6
|
5月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
779 3
|
4月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
481 0
|
5月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
1048 1
|
4月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
488 100
|
5月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
3月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
440 35
|
3月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
290 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
3月前
|
存储 算法 搜索推荐
《数据之美》:Java数据结构与算法精要
本系列深入探讨数据结构与算法的核心原理及Java实现,涵盖线性与非线性结构、常用算法分类、复杂度分析及集合框架应用,助你提升程序效率,掌握编程底层逻辑。

热门文章

最新文章