课时31:数组相关类库

简介: 本文主要介绍Java中数组的两种常见操作方法——排序和拷贝,包括系统提供的方法及其使用方式、原理,以及自己实现这些操作的思路,帮助读者理解数组操作在Java开发和面试中的应用。1.数组排序2.数组拷贝

课时31:数组相关类库

摘要:本文主要介绍Java中数组的两种常见操作方法——排序和拷贝,包括系统提供的方法及其使用方式、原理,以及自己实现这些操作的思路,帮助读者理解数组操作在Java开发和面试中的应用。

1. 数组排序

2. 数组拷贝

 

01、  数组排序


在Java语言中,由于数组是一个重要的概念,Java本身提供了对数组的相关支持。这在开发过程中,数组排序是一项常用操作。


以往手动编写的数组排序代码,通常只能针对整型数组进行排序。但在实际应用中,可能会遇到浮点型、字符型等不同类型数组的排序需求。为了方便开发者进行排序操作,Java提供了`java.util.Arrays.sort(数组名称)`方法来实现对各种类型数组的排序。


以一个简单程序为例,在代码中先定义一个无序数组,如:

int[] data =new int {23, 12, 1, 234, 2,6,12,34,56};

image.png

此时数组是无序的。若要对其进行排序,只需在代码中使用`java.util.Arrays.sort(data)`即可完成排序操作。对代码进行编译和执行后,可看到数组已完成排序。

image.png

需要注意的是,在面试笔试场景中,如果遇到要求编写数组排序代码的题目,不能直接使用`java.util.Arrays.sort()`方法。因为这类题目主要考察的是开发者的基础逻辑能力,所以应按照之前学习的排序算法过程进行编写。而在实际开发中,`java.util.Arrays.sort()`方法能提高开发效率,可直接使用。

 

02、 数组拷贝


数组拷贝在Java开发中也是较为常见的操作,Java提供了`System.arraycopy()`方法来实现。该方法的使用格式为:`System.arraycopy(源数组, 源数组起始点, 目标数组, 目标数组开始点, 拷贝长度)`

例如,假设有两个数组`数组1`和`数组2`,`数组1`的内容为`{1, 2, 3, 4, 5, 6, 7, 8, 9}`,`数组2`的内容为`{11, 22, 33, 44, 55, 66, 77, 88, 99}`。若要将`数组1`从索引5开始的3个元素拷贝到`数组2`从索引3开始的位置,使`数组2`最终内容变为`{11, 22, 33, 6, 7, 8, 77, 88, 99}`,可通过以下代码实现:

Int dataA[] =new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9};
Int dataB[] =new int [] {11, 22, 33, 44, 55, 66, 77, 88, 99};
System.arraycopy(dataA, 5, dataB, 3, 3);

image.png

 

对上述代码进行编译和执行,即可看到`dataB`的内容按照预期进行了修改。

image.png

这些操作的支持都是系统本身提供的,即:你都是可以在开发中使用的操作。虽然Java系统提供了数组拷贝的方法,但如果要深入分析拷贝原理,其实自己实现数组拷贝也可以直接完成。可以通过定义一个方法来实现,例如:

static void ArrayCopy(int[] src, int sIndex, int[] dsc, int dIndex, int len) {
    for (int x = 0; x < len; x++) {
        dsc[dIndex + +] = src[sIndex + +];
    }
}

在上述自定义方法中,通过循环遍历,将源数组中指定位置的元素逐个拷贝到目标数组的相应位置。对包含该自定义方法的代码进行编译和执行,同样可以实现数组拷贝功能。


不过,自己定义数组拷贝或排序方法时,需要考虑所有的数据类型。因为不同的数据类型在操作上可能存在差异,若要使自定义方法适用于多种数据类型,代码会变得复杂且重复。所以,Java提供的系统方法能够帮助开发者节省公共且重复的处理过程。


在实际开发中,记住`System.arraycopy()``java.util.Arrays.sort()`等方法的使用即可满足大部分需求。对于这两个方法,后续还会有更完整的说明,目前先对其有个初步印象并记住基本使用方式。

相关文章
|
9月前
|
编解码 Cloud Native 算法
通义万相:视觉生成大模型再进化
通义万相是阿里云推出的视觉生成大模型,涵盖图像和视频生成。其2.0版本在文生图和文生视频方面进行了重大升级,采用Diffusion Transformer架构,提升了模型的灵活性和可控性。通过高质量美学标准和多语言支持,大幅增强了画面表现力。此外,视频生成方面引入高压缩比VAE、1080P长视频生成及多样化艺术风格支持,实现了更丰富的创意表达。未来,通义万相将继续探索视觉领域的规模化和泛化,打造更加通用的视觉生成大模型。
|
7月前
|
Oracle Java 关系型数据库
课时48:JavaDoc文档简述
主要讲解了Java DOC文档的使用方法和技巧。首先,介绍了Java DOC的简介,强调了在开发过程中需要大量使用API文档。其次,详细解析了Java DOC的组成结构,包括位的完整定义、类的相关说明以及方法的详细解释。 1.Java DOC简介 2.Java DOC文档的组成
163 20
|
7月前
|
Java 程序员 数据处理
课时19:Java运算符(位运算符)
课时19介绍Java中的位运算符,涵盖进制转换、位与、位或及移位操作。重点讲解了二进制与其他进制的转换方法,通过具体范例演示了位与和位或运算的过程,并展示了八进制和十六进制的处理方式。此外,还解释了逻辑运算符(&&、||)与位运算符(&、|)的区别及其应用场景,特别是位运算在加密中的应用。
153 5
|
7月前
|
Java
课时18:Java运算符(逻辑运算符)
课时18介绍了Java中的逻辑运算符(与、或、非)。通过范例详细讲解了非操作的使用,展示了如何正确应用逻辑非(!)。接着分别探讨了与操作(& 和 &&)及或操作(| 和 ||),强调了短路运算符(&& 和 ||)在性能和安全性上的优势。课程通过具体代码示例演示了不同逻辑运算符的效果及其应用场景。
176 5
|
7月前
|
Java C++
课时124:assert断言
assert断言的含义以及使用 1.断言的引入 2.生活实例理解断言 3.Java 中断言的使用
162 2
|
7月前
|
Java
课时10:Java数据类型划分(整型类型)
本文主要围绕Java中整型数据展开,详细讲解整型变量、常量的概念,整型数据运算规则,包括数据溢出问题及解决方法,数据类型转换(自动转换与强制转换)的原理和注意事项,同时介绍了整型数据默认值的相关知识,以及byte数据类型与int数据类型的关系和使用场景,帮助读者全面掌握Java整型数据的相关内容。
191 4
|
7月前
|
Java 开发者
课时98:泛型接口
本文聚焦Java泛型接口,阐述泛型不仅能在位(类)上定义,还可在接口中使用。通过实际代码示例,详细介绍泛型接口的定义以及子类实现泛型接口的两种方式,帮助读者理解其概念和应用,强调在实际编程中理解和掌握这些知识的重要性。 1.泛型接口的定义 2.泛型接口的子类实现方式
153 2
|
7月前
|
Java
课时103:生成jar文件
本文介绍了Java中生成和使用JAR文件的基本概念与操作。JAR文件用于将多个类文件打包成一个压缩文件,便于管理和分发。通过JDK提供的`jar`命令可以创建JAR文件,并可通过设置CLASSPATH环境变量来配置和使用这些文件。文中还演示了如何定义、编译和打包一个简单的Java程序为JAR文件,并详细解释了JAR文件的结构及配置方法。此外,简要提及了JDK 1.9后引入的模块化系统对JAR文件的影响。
189 1
|
7月前
|
测试技术
课时108:用例图
课时108介绍了用例图的设计与描述。用例图用于展示系统中不同角色的功能分配,如系统管理员拥有系统初始化、备份、公告发布等功能,而普通管理员仅负责公告管理。通过建立Use Cases图,可以直观呈现各角色的具体功能,帮助在项目设计阶段明确角色权限和职责。用例图是详细设计和概要设计的重要组成部分,有助于清晰表达系统的功能结构。
170 1
|
7月前
|
设计模式 Java uml
课时107:时序图
课时107介绍了时序图的描述与设计。时序图用于展示代码执行流程,如Java程序中接口IMessage、类MessageImpl及Factory的调用顺序。通过Power Designer创建UML Sequence Diagram,定义类操作结构并绘制消息传递路径,清晰呈现工厂模式下对象实例化和方法调用的过程。时序图帮助理解程序逻辑,适用于项目开发中的流程分析与文档记录。
208 1