Java数组使用练习(完)

目录

1.数组的使用

1.1数组拷贝native

1.2二分查找

1.3数组元素的平均值

1.4数组元素的排序

1.5其他的常用的方法

1.6冒泡排序实现

1.7数组元素的逆置实现

1.8二维数组

2.关于数组的课后练习

2.1改变数组原有的元素的值

2.2奇数在前,偶数在后

2.3判断目标是哪两个数字求和

2.4单身狗

2.5多数元素

2.6三个连续奇数的数组

3.不规则二维数组


1.数组的使用

1.1数组拷贝native

这个方法如果是被native所修饰,这个就是底层使用的C/C++实现的,这个优点就是速度很快;

我们的copyOf和copyofRange这个函数底层使用的都是这个函数;

我们的这个函数也是可以实现这个拷贝的,使用的就是这个 arraycopy这个函数,使用system进行调用的,这个里面的参数其实很好理解,从arra数组的0位置开始拷贝,拷贝到这个temp的0位置,这个拷贝的元素的个数就是我们的arr.length长度;

这个提示代码里面也写了这个srcPos意思就是源头的开始的位置,destPos就是我们的目的地的位置下标,这个灰色的是我们的这个系统提示出来的,我们不需要写的,他自己会自动补充出来;

1.2二分查找

前提就是这个数组里面的这个元素是有序地,因此这个参数就是我们的数组和我们的查找的元素,pos接受的就是我们想要查找的元素,因为这个4是存在的,因此这个打印的结果就是3下标;

下面的这个Arrays里面的这个binaryResearch这个方法就是原生的查找的方法,也是可以实现这个二分查找的效果的;

这个如果不存在,我们自定义实现的是返回-1,而这个原生的函数返回的是-(length+1)这个值,也是一个负数;

1.3数组元素的平均值

通过遍历这个数组求解我们的数组元素的和,然后除以这个数组元素的个数就是我们的这个数组的和的平均值;

1.4数组元素的排序

我们可以调用这个arrays这个类里面的sort函数对于这个无顺序的数组进行排序;

1.5其他的常用的方法

Arrays里面为我们提供了很多的方法,其中的这个equals用来进行判断我们的这个两个数组是不是完全一样的;

fill表示对于这个数组里面的元素进行填充,我们的下面的这个案例的就是3-5这个下标,左闭右开区间,填充的数值是-1这个元素;

1.6冒泡排序实现

这个冒泡排序也是使用两个循环进行控制,进行这个数据的交换,主要是使用的这个arrays.tostring这个方法进行数组元素的打印;

1.7数组元素的逆置实现

定义一个left和right,让两个指针一个向前移动,一个向后移动,让对应位置的元素进行交换;

1.8二维数组

第一种就是两层循环的方式,这个二维数组可以理解为两个一维数组,我们的这个外层循环就是求解的一维数组的个数,第二层循环求解的是每一个一维数组元素的个数;

第二个调用的是我们的这个Arrays对象里面的一个方法,实现对于这个二维数组的打印;

第三种打印的方式:使用的就是我们的这个for类似的东西,这个第一次就是接受我们的一维数组的,

2.关于数组的课后练习

2.1改变数组原有的元素的值

上面的这个题目其实有两个方法解决,一个就是在原来的这个数组上面进行操作,还有一个就是开辟一个新的数组,然后对于这个新的数组进行操作,这个时候我们的数组的初始版本是不变的,我们在这个数组上面直接操作的话就会改变这个数组;

第一个func1就是直接在原来的数组上面进行操作;

第二个func2就是开辟相同空间大小数组temp,我们把原来的数组扩大2倍之后的这个数值存储到我们的这个temp数组对应的这个下标位置;

2.2奇数在前,偶数在后

我们可以通过一个left和一个right控制这个过程,因为这个题目要求我们的奇数在前面,因此这个时候我们判断对于这个数值%2之后的余数,如果不是0证明这个数字就是奇数,我们直接让这个left+=就可以了,因为我们的奇数本来就是在前面的,同理对于这个right进行控制,然后如果两个条件都没有满足,这个时候我们就会使用这个swap对于这个数据进行交换;

我们细心就会发现这个内层的while循环里面,还有一个这个left<right的判断,这个外面不是已经有了吗,为什么里面还要写,我们可以尝试只写arr[left]%2==0这个式子,这个时候我们会发现,奇数在前,偶数在后的这个效果是无法实现的,这个是因为我们的最外层的left<right主要就是控制这个循环的,刚开始这个最外层的循环是一定满足的,但是这个如果里面不写这个left<right,我们如果遇到全部都是奇数的情况,这个left就会一直++下去,无法停止,这个显然是不可以的;

2.3判断目标是哪两个数字求和

针对于这个问题,我们就是使用这个i,j对于这个数组里面的元素进行控制;

我们的做法就是:让i指向第一个元素,j指向第二个元素,这个时候i不变,我们让这个j不断地向后++,直到我们的这个i,j下标对应的这个数值相加求和之后为我们的target再停止这个过程;

如果还是不行,我们让这个i指向第二个位置的元素,让这个j指向第三个位置的元素,j从第三个位置开始向后,依次进行求和,我们会发现这个过程中,初始情况下这个i+1等于j,因此这个也是我们的循环初始时刻的这个情况,因为我们的最后一个肯定是j,所以我们的这个终止条件在写的时候,是i<arr.length-1,而这个j<arr.length,因为我们的这个i不可能指向最后一个元素,但是这个j是可以指向最后一个元素的;

我们在这个func函数里面对于这个temp初始化的时候是全部初始化为-1,这个主要是因为我们的temp作为返回值,如果我们最后找到了,可以把找到的两个元素的下标复制到这个temp里面,如果没有找到,这个时候我们的两个-1虽然被返回了,但是这个下标不可能是-1,因此这个是提示我们目标求和之后为targer的两个数字没有找到;

2.4单身狗

这个就是设置一个初始值,然后不断的进行异或操作;

下面的这个就是让我们的这个ret依次和这个数组里面的每一个元素进行异或,剩下的这个数字保留在了我们的这个ret变量里面,这个时候我们的ret就是这个只出现一次的数字;

2.5多数元素

出现次数大于n/2次的元素:叫做多数元素;

这个看似好像需要我们进行统计,实际上这个只要我们使用sort进行排序之后,这个里面的中间的元素就是出现多数的元素,不信下去可以试试;

因此我们的这个方法里面先是对于传递进来的这个数组进行sort,然后把这个排序之后数组的之间位置返回就可以了;

2.6三个连续奇数的数组

因为统计的是出现三次的数字,因此我们需要定义一个count,连续出现一次就加上1,如果中间遇到了偶数,这个时候就count置为0,每一次对于这个count++的时候都需要判断我们的count是不是等于3,等于3就需要返回true,证明这个数组里面是有三个连续的奇数的;

3.不规则二维数组

我们上次说了这个java里面的二维数组的打印方法,以及这个二维数组里面的理解,是多个一维数组组成的;

我们的第一行是定义一个两行的数组,第一行的数组有三列,第二行的数组有3列,上面的就是这个不规则数组的图解,方便我们理解,这个就是java里面的不规则的二维数组的用法;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/436003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解人工智能:从机器学习到深度学习

深入理解人工智能&#xff1a;从机器学习到深度学习 前言人工智能&#xff08;AI&#xff09;实际应用示例代码 机器学习&#xff08;ML&#xff09;分类常见算法示例代码 深度学习&#xff08;DL&#xff09;应用示例代码 神经网络&#xff08;NN&#xff09;研究方向示例代码…

Midjourney中文版:解锁AI艺术创作的无限潜能

在数字化时代&#xff0c;艺术创作与科技的融合正以前所未有的速度推进&#xff0c;而Midjourney中文版正是这一趋势下的璀璨明星。作为一款专为中文用户设计的AI绘图工具&#xff0c;它不仅集成了最先进的深度学习技术&#xff0c;还通过本地化优化&#xff0c;为国内设计师和…

element 输入框文字+对应签进行长度 和 的判断

输入文字长度 指定标签的长度 &#xff08;判断长度并提示&#xff09; <div style"position: relative;" classchangyongyu><el-input type"textarea" :autosize"{ minRows: 8, maxRows: 8 }" style"margin-bottom:10px;"…

Lombok同时使⽤@Data和@Builder遇到的坑

Lombok同时使⽤Data和Builder遇到的坑 Lombok是什么有什么问题不使用任何注解只使用Data注解只使用Builder注解同时使用Data和Builder注解 如何解决Builder和NoArgsConstructor冲突使用AllArgsConstructor Lombok是什么 Lombok 是一个 Java 库&#xff0c;它通过注解的方式帮助…

【Linux】进程替换

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 进程程序替换 代码和现象 替换函数 替换原理 函数解释 命名理解 简易s…

视频美颜SDK与直播美颜工具API是什么?计算机视觉技术详解

今天&#xff0c;小编将深入探讨视频美颜SDK与直播美颜工具API的概念及其背后的计算机视觉技术。 一、视频美颜SDK的概念 视频美颜SDK是一套用于开发实时美颜效果的工具集&#xff0c;开发者可以利用它在视频流中实现面部特征的优化。这些SDK通常提供了一系列功能&#xff0c…

计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python 数据分析 可视化大屏 附源码 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…

fastAPI教程:jinja2模板

FastAPI 五、jinja2模板 jinja是python知名web框架Flask的作者开发的⼀个开源的模板系统&#xff0c;起初是仿django模板的⼀个模板引擎DjangoTPL&#xff0c;为Flask提供模板支持&#xff0c;由于其灵活&#xff0c;快速和安全等优点被⼴泛使用。 jinja2是jinja2这个模块的…

erlang学习:Linux命令学习8

shell脚本案例学习 循环求 1-100 的每一步和 —案例 j0 i1 while((i<100)) do j$((ji)) echo $j ((i)) done每 30 s循环判断一次 user 用户是否登录系统 —案例 设置了一个次数&#xff0c;如果循环了五次在user文件中添加user用户&#xff0c;表示用户登录 USERS"u…

nodejs安装及环境配置

一、下载 进入官网https://nodejs.org/en/download/prebuilt-installer下载node.js安装包&#xff0c;选择对应版本的node&#xff0c;这里我选择的是14.21.3版本 二、安装 1、下载完成后&#xff0c;双击“node-v14.21.3-x64.msi”&#xff0c;开始安装Node.js 2、勾选复…

【电机-概述及分类】

文章目录 第1章1-1 电机的定义1-2 电机的构成要素1-3 电机的分类1-3-1 直流电机1-3-1-1 永磁励磁型直流电机1-3-1-2 电磁铁励磁型直流电机 第1章 重新认识电机的体系 电机包括许多种类。换个角度来看&#xff0c;并没有完美的电机&#xff0c;某种电机具有所谓A的优点&#xf…

STM32F1+HAL库+FreeTOTS学习14——数值信号量

STM32F1HAL库FreeTOTS学习13——数值信号量 1. 数值信号量2. 相关API函数2.1 创建计数信号量2.2 获取信号量2.3 释放信号量2.4 删除信号量2.5 获取信号量的计数值 3. 操作实验1. 实验内容2. 代码实现&#xff1a;运行结果 上一期我们学习了二值信号量 &#xff0c;这一期学习计…

在线相亲系统:新时代的婚恋观与传统习俗的碰撞

随着互联网技术的发展&#xff0c;相亲交友平台已成为年轻人寻找伴侣的新方式。这些平台不仅改变了人们的社交习惯&#xff0c;也反映了当代婚恋观与传统习俗之间的碰撞与融合。开发h17711347205本文将探讨在线相亲系统是如何在尊重传统的基础上&#xff0c;为现代年轻人提供更…

21.1 k8s接口鉴权token认证和prometheus的实现

本节重点介绍 : k8s接口鉴权方式serviceaccount和token的关系手动curl访问metrics接口 k8s对象接口鉴权 以容器基础资源指标为例 对应就是访问node上的kubelet的/metrics/cadvisor接口&#xff0c;即访问https://nodeip:10250/metrics/cadvisor 直接curl访问 会报错&…

第一弹:llama.cpp编译

1.编译llama.cpp命令行&#xff08;电脑版本&#xff09;&#xff1b; 2.交叉编译安卓命令行版本。 一、Llama.cpp是什么&#xff1f; 二、Llama.cpp编译 首先我们尝试编译llama.cpp. 2.1 下载llama.cpp 项目的github地址&#xff1a; https://github.com/ggerganov/llama…

ubuntu18.04 NVIDIA驱动 CUDA cudnn Anaconda安装

1、安装NVIDIA驱动 a.查看推荐驱动 ubuntu-drivers devicesb.打开软件更新&#xff0c;选择相应的显卡 c.重启查看安装情况&#xff0c;输入nvidia-smi 2、安装CUDA 下载链接https://developer.nvidia.com/cuda-toolkit-archive 安装CUDA&#xff1a; sudo bash cuda_11…

完整网络模型训练(一)

文章目录 一、网络模型的搭建二、网络模型正确性检验三、创建网络函数 一、网络模型的搭建 以CIFAR10数据集作为训练例子 准备数据集&#xff1a; #因为CIFAR10是属于PRL的数据集&#xff0c;所以需要转化成tensor数据集 train_data torchvision.datasets.CIFAR10(root&quo…

前端工程规范-2:JS代码规范(Prettier + ESLint)

Prettier 和 ESLint 是两个在现代 JavaScript 开发中广泛使用的工具&#xff0c;它们结合起来可以提供以下作用和优势&#xff1a; 代码格式化和风格统一&#xff1a; Prettier 是一个代码格式化工具&#xff0c;能够自动化地处理代码的缩进、空格、换行等格式问题&#xff0c;…

【C++算法】8.双指针_三数之和

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 15.三数之和 题目描述&#xff1a; 解法 解法一&#xff1a;排序暴力枚举利用set去重O(n3) 例如nums[-1&#xff0c;0&#xff0c;1&#xff0c;2&#xff0c;-1&…