Java基础快速入门: 数组高级操作与算法基础

AcWing算法基础课-785快速排序-Java题解 这篇文章介绍了使用快速排序算法对整数数列进行排序的方法,包括选择基准元素、分区操作和递归排序子数组。通过详细的步骤和示例,解释了快速排序的过程及其非稳定性特征,并提供了相应的 Java 代码实现。 阅读详情

本文纲要

  1. 二分查找
    思路分析
    代码实现
  2. 冒泡排序
    思路分析
    分步实现
    完整实现
  3. 递归
    概念与示例
    求阶乘案例
    递归内存图
  4. 快速排序
    思路分析
    核心代码实现
    完整递归实现
  5. Arrays工具类
    toString
    sort
    binarySearch

二分查找

1 ) 思路分析

二分查找的前提条件:数组元素必须按照大小顺序排列。

核心思想:每次去掉一半的查找范围,在剩余的范围中继续查找,直到找到目标元素或范围无效。

  • 定义两个变量 min 和 max,表示当前查找范围(最小索引和最大索引)。
  • 根据 min 和 max 计算出中间位置 mid:mid = (min + max) / 2。
  • 判断 arr[mid] 与目标值的关系:
    • 相等:直接返回 mid。
    • 目标值较小:说明目标在左半边,更新 max = mid - 1。
    • 目标值较大:说明目标在右半边,更新 min = mid + 1。
  • 循环条件:min <= max。
  • 如果 min > max,说明元素不存在,返回 -1。

2 ) 代码实现

项目结构:

src/
└── com/
    └── wb/
        └── arrsearch/
            └── MyBinarySearchDemo.java
package com.wb.arrsearch;
 
public class MyBinarySearchDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int number = 11;
 
        // 1. 我现在要干嘛? --- 二分查找
        // 2. 我干这件事情需要什么? --- 数组 元素
        // 3. 我干完了,要不要把结果返回调用者 --- 把索引返回给调用者
        int index = binarySearchForIndex(arr, number);
        System.out.println(index);
    }
 
    private static int binarySearchForIndex(int[] arr, int number) {
        // 1. 定义查找的范围 
        int min = 0;
        int max = arr.length - 1;
        // 2. 循环查找 min <= max
        while (min <= max) {
            // 3. 计算出中间位置 mid
            int mid = (min + max) >> 1;   // 右移1位相当于除以2 
            // mid指向的元素 > number
            if (arr[mid] > number) {
                // 表示要查找的元素在左边 
                max = mid - 1;
            } else if (arr[mid] < number) {
                // mid指向的元素 < number
                // 表示要查找的元素在右边
                min = mid + 1;
            } else {
                // mid指向的元素 == number
                return mid;
            }
        }
        // 如果min大于了max就表示元素不存在,返回-1
        return -1;
    }
}

运行结果:查找 3 返回索引 2;查找 11 返回 -1。

冒泡排序

1 ) 思路分析

冒泡排序的核心:相邻元素两两比较,小的放前面,大的放后面,每一轮确定一个最大值放到最右边。

  • 如果有 n 个数据,需要比较 n-1 轮。
  • 每一轮结束后,下一轮比较时就会少一个元素参与(因为最右边的最大值已经确定)。

2 )分步实现

先按轮次拆开,逐步理解每一轮的操作。

package com.wb.mybubble;
 
public class MyBubbleSortDemo {
    public static void main(String[] args) {
        int[] arr = {3, 5, 2, 1, 4};
        // 期望结果: 1 2 3 4 5
 
        // 第一轮:把最大值5找出,并把它放到数组的最右边
        // -1 是为了让索引不超出范围
        for (int i = 0; i < arr.length - 1 - 0; i++) {
            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
        printArr(arr);
 
        // 第二轮
        for (int i = 0; i < arr.length - 1 - 1; i++) {
            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
        printArr(arr);
 
        // 第三轮
        for (int i = 0; i < arr.length - 1 - 2; i++) {
            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
        printArr(arr);
 
        // 第四轮
        for (int i = 0; i < arr.length - 1 - 3; i++) {
            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
        printArr(arr);
    }
 
    private static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

完整实现

将四轮循环合并为外层循环控制轮次,内层循环负责实际比较,内层循环的上限为 arr.length - 1 - i。

package com.wb.mybubble;
 
public class MyBubbleSortDemo2 {
    public static void main(String[] args) {
        int[] arr = {3, 5, 2, 1, 4};
        bubbleSort(arr);
    }
 
    private static void bubbleSort(int[] arr) {
        // 外层循环控制的是次数,比数组的长度少一次
        for (int i = 0; i < arr.length - 1; i++) {
            // 内层循环就是实际比较的
            // -1 是为了让数组不要越界
            // -i 每一轮结束之后,我们就会少比一个数字
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        printArr(arr);
    }
 
    private static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

递归

1 ) 概念与示例

递归:方法定义中调用方法本身。把复杂问题层层转化为与原问题相似的规模更小的问题。

递归的两个核心:

  1. 递归出口:必须要有结束条件,否则会导致栈内存溢出(StackOverflowError)。
  2. 递归规则:找到将大问题拆分为小问题的规律,且每次递归的参数更靠近出口。

先用循环方式求 1~100 的和,再改为递归方式。

package com.wb.myfactorial;
 
public class MyFactorialDemo1 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum = sum + i;
        }
        System.out.println(sum);
    }
}

递归实现:

package com.wb.myfactorial;
 
public class MyFactorialDemo2 {
    public static void main(String[] args) {
        int sum = getSum(100);
        System.out.println(sum);
    }
 
    private static int getSum(int i) {
        // 1~100之间的和
        // 100 + (1~99之间的和)
        //     99 + (1~98之间的和)
        //         ...
        //            1
        // 方法的作用: 求 1~i 之间和
        if (i == 1) {
            return 1;
        } else {
            return i + getSum(i - 1);
        }
    }
}

2 ) 求阶乘案例

需求:用递归求 5 的阶乘,并在控制台输出结果。

阶乘定义:5! = 5 × 4 × 3 × 2 × 1。

package com.wb.myfactorial;
 
public class MyFactorialDemo3 {
    public static void main(String[] args) {
        int result = getJc(5);
        System.out.println(result);
    }
 
    private static int getJc(int i) {
        // 1. 一定要找到出口 
        if (i == 1) {
            return 1;
        } else {
            // 2. 递归的规则
            return i * getJc(i - 1);
        }
    }
}

3 ) 递归内存图

以 getJc(5) 为例,方法调用与返回的过程如下:

getJc(1)getJc(2)getJc(3)getJc(4)getJc(5)maingetJc(1)getJc(2)getJc(3)getJc(4)getJc(5)main调用 getJc(5)5 * getJc(4)4 * getJc(3)3 * getJc(2)2 * getJc(1)return 1return 2return 6return 24return 120
  • 方法调用时依次进栈,到达出口 i == 1 时返回 1,然后依次出栈计算结果。
  • 如果没有出口,方法会无限进栈,最终导致 StackOverflowError。

快速排序

1 ) 思路分析

快速排序(快排)利用递归,每一次递归以左边第一个数作为 基准数,将比基准数小的放左边,比基准数大的放右边,从而确定基准数在数组中应存入的正确位置。

一次递归的步骤:

  1. 从右边开始找比基准数小的元素。
  2. 从左边开始找比基准数大的元素。
  3. 交换两个元素的位置。
  4. 重复上述过程,直到左右两个指针相遇。
  5. 基准数归位(与相遇位置的元素交换)。

一次递归结束后,基准数左边的元素都比它小,右边的都比它大,但左右两边内部的顺序尚未确定。接下来对左右两部分分别递归进行同样的操作。递归停止条件:left > right。

2 ) 核心代码实现(只确定一个基准数的位置)

package com.wb.myquitesort;
 
public class MyQuiteSortDemo {
    public static void main(String[] args) {
        // 1. 从右开始找比基准数小的
        // 2. 从左开始找比基准数大的
        // 3. 交换两个值的位置
        // 4. 红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
        // 5. 基准数归位
        int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
 
        quiteSort(arr, 0, arr.length - 1);
 
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
 
    private static void quiteSort(int[] arr, int left, int right) {
        int left0 = left;
        int right0 = right;
 
        // 计算出基准数
        int baseNumber = arr[left0];
 
        while (left != right) {
            // 1. 从右开始找比基准数小的
            while (arr[right] >= baseNumber && right > left) {
                right--;
            }
            // 2. 从左开始找比基准数大的 
            while (arr[left] <= baseNumber && right > left) {
                left++;
            }
            // 3. 交换两个值的位置
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
        // 基准数归位
        int temp = arr[left];
        arr[left] = arr[left0];
        arr[left0] = temp;
    }
}

3 ) 完整递归实现

加入递归停止条件和左右递归调用。

package com.wb.myquitesort;
 
public class MyQuiteSortDemo2 {
    public static void main(String[] args) {
        int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
 
        quiteSort(arr, 0, arr.length - 1);
 
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
 
    private static void quiteSort(int[] arr, int left, int right) {
        // 递归停止条件 
        if (right < left) {
            return;
        }
 
        int left0 = left;
        int right0 = right;
 
        // 计算出基准数
        int baseNumber = arr[left0];
 
        while (left != right) {
            // 1. 从右开始找比基准数小的
            while (arr[right] >= baseNumber && right > left) {
                right--;
            }
            // 2. 从左开始找比基准数大的
            while (arr[left] <= baseNumber && right > left) {
                left++;
            }
            // 3. 交换两个值的位置
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
        // 基准数归位
        int temp = arr[left];
        arr[left] = arr[left0];
        arr[left0] = temp;
 
        // 递归处理左边部分
        quiteSort(arr, left0, left - 1);
        // 递归处理右边部分
        quiteSort(arr, left + 1, right0);
    }
}

运行结果:1 2 3 4 5 6 7 8 9 10

Arrays工具类

java.util.Arrays 类提供了操作数组的静态方法,常用方法:

  • toString(array):将数组内容拼接成字符串返回。
  • sort(array):对数组进行升序排序(底层使用快速排序)。
  • binarySearch(array, key):使用二分查找法查找元素索引,数组必须有序。

代码示例

package com.wb.myutils;
 
import java.util.Arrays;
 
public class MyArraysDemo {
    public static void main(String[] args) {
        int[] arr = {3, 2, 4, 6, 7};
 
        // 1. toString: 将数组转换为字符串
        System.out.println(Arrays.toString(arr)); // [3, 2, 4, 6, 7]
 
        // 2. sort: 排序(升序)
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr)); // [2, 3, 4, 6, 7]
 
        // 3. binarySearch: 二分查找(数组必须有序)
        int[] sortedArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int index = Arrays.binarySearch(sortedArr, 10);
        System.out.println(index); // 9
 
        // 查找不存在的元素: 返回 -插入点 - 1
        int index2 = Arrays.binarySearch(sortedArr, 11);
        System.out.println(index2); // -11  (-10 - 1)
        int index3 = Arrays.binarySearch(sortedArr, 0);
        System.out.println(index3); // -1   (-0 - 1)
    }
}

注意点:

  1. binarySearch 调用前数组必须有序。
  2. 如果元素存在,返回实际索引。
  3. 如果元素不存在,返回 -插入点 - 1。插入点是指该元素如果存在应该在的索引位置,减1是为了避免与索引0冲突(例如查找0时返回 -1 而不是 0)。

总结

以上内容涵盖了数组高级操作中的二分查找、冒泡排序、递归、快速排序以及 Arrays 工具类的核心知识与代码实现,适合作为 Java 基础阶段的算法入门参考

Java数组详解:从基础到高级应用 《Java数组详解:从基础到高级应用》全面介绍了Java数组的核心概念与操作技巧。主要内容包括:数组的声明与初始化方法(如int[] a = new int[5])、基本操作(访问、遍历、获取长度)、内存模型(连续存储特性)以及常用操作(排序、搜索、拷贝)。文章还详细讲解了多维数组、可变长参数和动态数组ArrayList的应用,并对比了数组与集合框架的差异。最后提供了数组性能分析(随机访问O(1))、应用场景和最佳实践建议(避免数组越界等常见错误)。适合Java开发者系统学习数组知识的参考指南。 阅读详情

相关推荐

算法之Java快速排序:深入剖析与优化策略

在编程的学习道路上,排序算法是提升编程技能的关键知识点。今天,咱们一起深入研究Java中的快速排序算法,从基本原理、性能分析到优化改进,希望能和大家共同进步,让我们在算法的世界里探索得更深更远!

wj_rdk的博客 1656

【Java数据结构与算法】Day2-高级排序(希尔、归并、快速、计数)

Java数据结构与算法中的比较高级的排序,希尔排序、归并排序、快速排序、计数排序

Hhzzy99的博客 8088

算法之Java编程基础深度解析与二分查找算法应用

在编程的学习旅程中,每一个知识点都是我们成长的基石。今天,咱们一同深入探索Java编程基础以及经典的二分查找算法,希望能和大家共同进步,在编程领域收获更多的知识与技能!

wj_rdk的博客 1395

【双路快速排序算法】详解:原理、图示与Java实现

双路快速排序是快速排序的改进版本,由C. A. R. Hoare提出,主要用于解决**含有大量重复元素**数组的排序问题。相比传统快速排序,它能更均衡地分配重复元素,避免分区不平衡导致的性能下降。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 7213

精通数组创建与操作:从基础到高级应用

数组是一组有序的元素集合,可以存储相同类型的数据项。在编程中,数组提供了一种高效访问和管理多个值的方式。对于IT专业人员来说,数组使得数据操作变得简单,且经常用于处理一系列数据,如列表、矩阵或任何线性数据结构。数组是编程中常用的数据结构之一,它可以存储一系列相同类型的元素。理解数组的定义及其在程序中的作用是掌握编程基础的关键步骤。数组是由一系列按顺序排列的相同类型的变量组成的集合。每个变量称为一个数组元素,每个元素可以通过索引来访问,索引通常以0开始。

weixin_42605397的博客 682

Java基础编程实践:数组操作及数值统计

Java作为一门静态类型的编程语言,对于数组的处理有着严格和明确的规范。本章节将带领读者深入了解Java一维数组的定义方法,包括数组的基本概念、声明、初始化、实例化、赋值以及访问和遍历。数组是一个用来存储固定大小的同类型元素的数据结构。在Java中,数组是一种对象,它能够存储多个变量,并且可以通过索引快速访问这些变量。数组的特性包括固定大小、线性存储和能够存储基本类型或对象引用。定义一维数组涉及选择数组的数据类型和分配内存空间。例如,创建一个整型一维数组。

weixin_29717341的博客 820

java快速入门

Java 集合框架主要由两大接口派生而出:Collection 和 Map。Collection 接口用于存储单个元素,而 Map 接口用于存储键值对。集合框架提供了统一的接口和方法,方便开发者对不同类型的集合进行操作,同时也提高了代码的可复用性和可维护性。

m0_74013450的博客 1424

SAP 发货在途库存管理:POD确认差异下的2种后续调整方案对比

本文详细解析了SAP发货在途库存管理中POD确认差异后的财务调整方案,对比了移动类型417和555 T两种处理方式的适用场景及财务影响。通过实际案例说明如何优化POD流程,减少库存差异损失,提升供应链管理效率。特别适合SAP SD模块用户及供应链管理人员参考。

chiman6219的博客 395

排序算法全景:从基础到高级的Java实现

排序算法是计算机科学中的一个基础概念,它在数据处理和信息检索中扮演着至关重要的角色。本文将通过几个简单的Java程序,带你了解几种常见的排序算法:插入排序、希尔排序、归并排序、快速排序和选择排序,以及一个用于生成和打印测试数据的工具类。

interest_ing_的博客 987

新手也能搞定!用ADS 2023从零设计一个超宽带Wilkinson功分器(附完整版图)

本文详细介绍了如何使用ADS 2023从零开始设计超宽带Wilkinson功分器,涵盖介质板参数设置、微带线计算优化、版图生成验证等关键步骤。通过实例演示和常见问题排查,帮助射频工程新手快速掌握功分器设计技巧,提升设计效率。

weixin_42692935的博客 478

【win11】主板更新之后pin不可用,恢复方法

台式机的主板更新了BIOS,再开机竟然登录不进去系统了。 登录界面上显示:【由于此设备上的安全设置已更改,你的pin码不再可用。单击以重新设置pin】 点击【单击以重新设置pin】没有任何反应。 也没有密码登录选项。 在网上找到解决方法,不用PE,只需要按步骤操作即可。通过实际验证可行,现记录如下。

1万+

Java数组终极指南:从基础到高级应用

Java 数组,编程界的 “数据列车”。一列列整齐的车厢(元素)等待着你放入各种数据货物。但这列车有个规矩,一旦确定了车厢数量(数组长度),就很难再临时加车厢。要是你一不小心坐错了车厢号(索引错误),那就得像在迷宫里找出口一样,被程序错误提示搞得晕头转向咯!

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 577

基于Python的携程景点评价爬虫与情感评分分析

摘要: 本项目通过Python技术栈实现携程景点评论的情感分析系统,包含数据爬取、文本预处理、情感评分和可视化分析全流程。使用requests抓取评论接口,jieba进行中文分词,SnowNLP计算情感得分(0-1),并通过词云、情感分布图呈现结果。典型分析显示72%评论为正面,负面反馈多涉及"排队久""票价贵"等问题。系统可辅助景点口碑管理,扩展方向包括多景点对比、BERT模型优化等。项目强调需遵守爬虫伦理,控制请求频率,适用于非商业用途的旅游数据分析。(150字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 978

掌握Java中常用的数组操作方法

本文将介绍Java中常用的数组操作方法,通过详细的示例和解释,帮助读者全面理解和掌握这些方法,并提升在数组处理方面的编程能力。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

Linux 内核参数:meminfo

内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。本文要分析的节点meminfo是Linux 操作系统中查看系统内存最准确(meminfo 中有内存黑洞)的方法,它包含当前时刻系统的所有物理页面的信息。

私房菜 2416

Python 爬虫实战:抓取百科网站上某个词条的详细信息

百科网站(如维基百科)为用户提供了丰富的知识内容,涵盖了从历史、文化到科技等几乎所有领域的知识。对于需要大量数据进行分析、研究或机器学习项目的开发者而言,抓取这些网站的数据显得尤为重要。通过编写一个 Python 爬虫,我们能够轻松地抓取百科网站上的某个词条及其详细信息,从而获取并整理这些知识内容。本篇博客将深入介绍如何通过 Python 编写爬虫来抓取百科网站(如维基百科)的某个词条的详细信息,包括标题、正文内容、参考文献等。requests:发送 HTTP 请求,获取页面内容。

2201_76125261的博客 1671

Java如何快速入门?Java基础_Java入门

小编认为对接触Java的小白来说,最担心的应该就是Java怎么学,都需要掌握哪些内容?今天这篇文章希望能帮助大家快速入门Java,少走弯路! 一、作为刚接触Java的新手,肯定要先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Java程序的开发。 学习Java语言最重要的是:学习步骤和方法 只要找到适合自己的学习方式,找到适合自己现阶段的学习资料

m0_46184557的博客 4481

海康VisionMaster与西门子PLC1200进行S7通信

通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。 本文以西门子PLC1200作为外部设备为例,讲解海康VisionMaster与西门子PLC1200进行S7通信。......

haier123888的博客 1万+

java基础从入门到上手(五):数组

数组是一种数据结构,它可以存储多个数据元素。这些元素在内存中是连续存储的,可以通过索引来访问。数组可以用来存储相同类型的数据,如整数、字符或其他数据类型。数组具有固定的大小,在创建时就决定了其长度,且长度不可更改。 二维数组是一个数组的数组,通常用来表示矩阵或表格数据。在 Java 中,二维数组可以看作是一个包含多个一维数组的数组 一旦创建并初始化了数组,就可以使用数组中的元素。我们通过数组的索引来访问元素。在 Java 中,数组的索引从 0 开始。

个人开发经验记事本在此!穿梭于代码世界,积累下满满实战心得。于我而言,开发不仅是技术的打磨,更是经验的沉淀。 1532

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2388

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java基础23-Java 数组进阶:数组排序算法对比(冒泡 / 快排 / Arrays.sort)

摘要: 本文深入探讨Java中三种数组排序方法:冒泡排序、快速排序和Arrays.sort(),分析其原理、实现及性能差异。冒泡排序简单但效率低(O(n²)),适合学习;快速排序采用分治思想,平均性能优异(O(n log n));而Arrays.sort()是JDK优化后的工业级实现,综合性能最佳。文章通过代码示例、复杂度对比和应用场景,帮助开发者根据需求选择合适算法,避免常见误区,提升程序效率。 (字数:148)

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Java基础入门篇】四、数组和排序

【Java基础入门篇】第四部分主要包括数组定义和常见的排序(选择、冒泡、插入、堆、基数等)

weixin_52836217的博客 785

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java数组全面解析:从基础到高级应用

数组是一种**线性数据结构**,用于存储**固定大小**的**相同类型**元素的集合。数组中的每个元素可以通过**索引**(从0开始的整数)进行访问。**注意**:`Arrays.asList()`返回的是固定大小的列表,不能添加/删除元素。- **快速访问**:通过索引可直接访问任意元素(时间复杂度O(1))

mashaohan的博客 325

Java基础-数组操作

Java基础Java基础-数组操作原创诗词遍历数组数组排序冒泡排序法交换变量使用Arrays.sort对数组排序修改了数组本身总结多维数组二维数组三维数组代码演习总结命令行参数总结 Java基础-数组操作 原创诗词 《送别》 作者:沙家大少 大风难进深院墙,肢体难胜夏日署。一日嘈嚷多少事?静坐静想浑不知! 多日相识算相知,心愿不要就此辞。世事本无月圆日,鸾飞蝶舞是梦时。 恨风恨雨恨秋月,最深却数永难见。愿君日后能安好,他日再见莫不识! 如果这篇文章对您有帮助,或是觉得小弟诗词天赋还可以,还请求点个赞! 知

沙家大少 1214

Java 常用类 Arrays:从基础到进阶的数组操作指南

Arrays类是 Java 开发中不可或缺的工具,掌握其核心方法与高级技巧能显著提升代码效率与质量。建议在实际项目中:优先使用内置方法:避免重复造轮子,减少 Bug 风险。关注性能边界:大数据量时启用并行操作,小数据量则用基础方法。警惕对象数组陷阱:深度比较、自定义排序规则需明确指定。通过本文的解析,相信你已能熟练运用Arrays类应对各类数组操作场景,成为更高效的 Java 开发者!延伸阅读Java 8 新增的源码解析Comparator链式编程与复杂排序策略设计🚧 您已阅读完全文99%!

like21a的博客 1064

Java 数组从入门到实战:概念、操作与经典案例解析

本文详细介绍了Java数组的核心概念、基本操作及实战应用。文章首先解析了数组的三大特性:相同数据类型、连续存储空间和0起始下标,并对比了不同数据类型的数组内存占用。第二部分讲解数组的两种创建方式(静态/动态初始化)和元素访问、遍历方法。第三部分通过"求最值"和"找缺失数字"两个典型案例展示数组的实际应用。最后总结了数组常见问题及与ArrayList的对比,建议通过多写代码、避坑训练等方式掌握数组的使用。文章为初学者提供了系统的数组学习路径,为后续数据结构学习打下基础。

2503_93734861的博客 1084
上一篇: Java基础快速入门: 时间和日期处理全解析
下一篇: Java基础快速入门: 异常处理机制完全指南
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值