Java数组使用练习(完)

news2024/12/27 1:56:54

目录

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.coloradmin.cn/o/2180917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure大屏可视化模板在不同领域中的实际应用案例

一、农业领域 案例背景&#xff1a; 智慧农业是当前农业发展的重要趋势&#xff0c;通过物联网、大数据等技术手段&#xff0c;实现农业生产的智能化管理。Axure大屏可视化模板在智慧农业平台的建设中发挥了重要作用。 实际应用&#xff1a; 农田环境监控&#xff1a;通过Axu…

TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用

TMS320F280025 CPUtimer定时器原理分析与使用 ` 文章目录 TMS320F280025 CPUtimer定时器原理分析与使用框图分析定时器中断定时器使用CPUtimers.cCPUtimers.h框图分析 定时器框图如图所示 定时器有一个预分频模块和一个定时/计数模块, 其中预分频模块包括一个 16 位的定时器分…

基于单片机的家用安防报警系统设计

本设计基于STM32F103单片机作为系统主控核心&#xff0c;通过DS18B20温度传感器和MQ烟雾传感器对家庭环境的温度和烟雾浓度进行检测实现火灾预警的设计要求&#xff0c;当检测数据异常时激发报警提示。系统采用红外传感器对家庭环境中是否有盗贼进入实现检测&#xff0c;当出现…

单臂路由详解

目录 单臂路由概念 单臂路由实验 路由器配置 交换机配置 实验验证 基于Eth-Trunk的单臂路由 路由器配置 交换机配置 实验验证 单臂路由概念 单臂路由技术能让路由器的一个物理接口对应不同VLAN数据的实质是把物理接口分成若干个子接口&#xff0c;这些子接口通过封装…

前端算法合集-1(含面试题)

(这是我面试一家中厂公司的二面算法题) 数组去重并按出现次数排序 题目描述: 给定一个包含重复元素的数组&#xff0c;请你编写一个函数对数组进行去重&#xff0c;并按元素出现的次数从高到低排序。如果次数相同&#xff0c;则按元素值从小到大排序。 let arr [2, 11,10, 1…

windows配置C++编译环境和VScode C++配置(保姆级教程)

1.安装MinGW-w64 MinGW-w64是一个开源的编译器套件,适用于Windows平台,支持32位和64位应用程序的开发。它包含了GCC编译器、GDB调试器以及其他必要的工具,是C++开发者在Windows环境下进行开发的重要工具。 我找到了一个下载比较快的链接:https://gitcode.com/open-source-…

表格控件QTableWidget

下面说一下表格的常用方法 行列数目、行表头、列表头 行表头&#xff1a;就是表格控件的第一行&#xff0c;用于设置每一列的标题 列表头&#xff1a;就是表格控件的第一列&#xff0c;用于设置每一行的标题&#xff0c;通常缺省则默认显示行号 设置和获取行列的数目 在添…

【CKA】一、基于角色的访问控制-RBAC

1、基于角色的访问控制-RBAC 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 这道题就三条命令&#xff0c;建议直接背熟就行。 也可以查看帮助 kubectl create clusterrole -h kubectl create serviceaccount -h kubectl create rolebinding -h 注意&#xff1a; 1、资…

Prisma 基本使用

以下内容官方文档都有&#xff0c;特此记录便于快速查阅文档。 Prisma CLI 作为开发依赖项安装到项目中 npm install prisma --save-devPrisma 配合 ts 很强大&#xff0c;所有我们可以结合 ts 一起使用&#xff1a; npm install typescript ts-node types/node --save-dev n…

对于“言而有信”之己见

大凡古文爱好者&#xff0c;都知晓《论语》中的“仁、义、礼、智、信”这五大做人的常理。 网络图片 儒家对于“言而有信”的认识十分理性&#xff0c;尤其是其中的“信”字&#xff0c;对于当今社会成堆“老赖”&#xff0c;简直就是直接打在他们脸上的大巴掌。​ 古人对于“…

强化学习-python案例

强化学习是一种机器学习方法&#xff0c;旨在通过与环境的交互来学习最优策略。它的核心概念是智能体&#xff08;agent&#xff09;在环境中采取动作&#xff0c;从而获得奖励或惩罚。智能体的目标是最大化长期奖励&#xff0c;通过试错的方式不断改进其决策策略。 在强化学习…

传统操作系统和分布式操作系统的区别

分布式操作系统和传统操作系统之间的区别&#xff0c;根植于它们各自的设计哲学和目标。要理解这些差异&#xff0c;需要从操作系统的基本定义、结构、功能以及它们在不同计算环境中的表现进行分析。每种系统都试图解决特定的计算挑战&#xff0c;因此在不同的使用场景下具有各…

互斥量mutex、锁、条件变量和信号量相关原语(函数)----很全

线程相关知识可以看这里: 线程控制原语(函数)的介绍-CSDN博客 进程组、会话、守护进程和线程的概念-CSDN博客 1.同步概念 所谓同步&#xff0c;即同时起步&#xff0c;协调一致。不同的对象&#xff0c;对“同步”的理解方式略有不同。如&#xff0c;设备同步&#xff0c;是…

前端——js补充

一、数学对象 1.随机数 // 0-1 console.log(Math.random()); // 0-9 console.log(Math.random() * 9); // 6-13 console.log(Math.random() * (13 - 6) 6); //n-m Math.random() * (m - n) n 2.取整 // 向下取整 console.log(Math.floor(1.9));//1 // 向上取整 console.log(…

解决端口被占用

当你被你的编译器提醒&#xff0c; 当前端口被占用&#xff0c; 但明明你的服务什么的都没有启用&#xff0c;这时有三种解决办法&#xff1a; 1 。 重启 。 重启解决80%的问题 2 。 修改你的端口号 。 3 。 去windows命令行中查看&#xff0c;端口占用情况 第一步 &#xf…

OpenStack Yoga版安装笔记(十五)Horizon安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

[卸载] 软件彻底卸载工具的下载及详细安装使用过程(附有下载文件)

一般软件安装的有问题&#xff0c;或者想重新安装其他版本就需要将原来的版本删除干净&#xff0c;但常常删不干净&#xff0c;本文分享一个软件彻底卸载工具&#xff0c;完成彻底卸载软件的工作 下载链接在文末 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文…

激光切割机适用材质有哪些

激光切割机是一种利用激光束对各种材料进行高精度、高速度切割的机器设备。其适用材质广泛&#xff0c;包括但不限于以下两大类&#xff1a; 一、金属材料 不锈钢&#xff1a;激光切割机较容易切割不锈钢薄板&#xff0c;使用高功率YAG激光切割系统&#xff0c;切割不锈钢板的…

AMD Instinct™ MI200 GPU内存空间概述

AMD Instinct™ MI200 GPU memory space overview — ROCm Blogs 注意: 本博客之前是 AMD实验室笔记博客系列的一部分。 HIP API 支持在加速系统上为主机和设备内存提供多种分配方式。在本文中&#xff0c;我们将&#xff1a; 1. 介绍一组常用的内存空间 2. 识别每种内存空间的…

Kubernetes强制删除terminating状态的namespace

Kubernetes中的Namespace处于Terminating状态并且常规删除不起作用。 1.Namespace长时间处于Terminating状态往往是因为某些finalizers阻止了它的删除。 kubectl get namespace <namespace-name> -o json > namespace.json 2.编辑生成的 namespace.json文件&#xff…