当前位置: 首页 > news >正文

【Java探索之旅】掌握数组操作,轻松应对编程挑战

个人头像
🎥 屿小夏 : 个人主页
🔥个人专栏 : Java编程秘籍
🌄 莫道桑榆晚,为霞尚满天!

文章目录

  • 📑前言
  • 一、数组巩固练习
    • 1.1 数组转字符串
    • 1.2 数组拷贝
    • 1.3 求数组中的平均值
    • 1.4 查找数组中指定元素(顺序查找)
    • 1.5 查找数组中指定元素(二分查找)
    • 1.6 数组排序(冒泡排序)
    • 1.7 数组逆序
  • 🌤️全篇总结

📑前言

掌握数组的基本操作对于编写高效的程序至关重要。本文将深入探讨数组的一些常见操作,包括数组转字符串、数组拷贝、求平均值、顺序查找、二分查找、数组排序等。通过学习这些操作,您将更加熟练地处理数组,提高代码的质量和效率。

一、数组巩固练习

1.1 数组转字符串

import java.util.Arraysint[] arr = {1,2,3,4,5,6};String newArr = Arrays.toString(arr);
System.out.println(newArr);// 执行结果
[1, 2, 3, 4, 5, 6]

使用了 java.util.Arrays 类中的 toString 方法。这个方法接收一个数组作为参数,并返回一个表示该数组的字符串。这个字符串是由数组元素的字符串表示形式组成,并使用逗号和空格分隔,并且整个字符串被方括号 [] 包围

使用这个方法后续打印数组就更方便一些

1.2 数组拷贝

import java.util.Arrays;
public static void func(){// newArr和arr引用的是同一个数组// 因此newArr修改空间中内容之后,arr也可以看到修改的结果int[] arr = {1,2,3,4,5,6};int[] newArr = arr;newArr[0] = 10;System.out.println("newArr: " + Arrays.toString(arr));// 使用Arrays中copyOf方法完成数组的拷贝:// copyOf方法在进行数组拷贝时,创建了一个新的数组// arr和newArr引用的不是同一个数组arr[0] = 1;newArr = Arrays.copyOf(arr, arr.length);System.out.println("newArr: " + Arrays.toString(newArr));// 因为arr修改其引用数组中内容时,对newArr没有任何影响arr[0] = 10;System.out.println("arr: " + Arrays.toString(arr));System.out.println("newArr: " + Arrays.toString(newArr));// 拷贝某个范围.int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);System.out.println("newArr2: " + Arrays.toString(newArr2));
}

在这里插入图片描述在这里插入图片描述

Arrays.copyOf 是 Java 中 java.util.Arrays 类的一个静态方法,用于创建并返回数组的一个副本,可以指定副本数组的长度。如果新数组的长度大于原数组的长度,那么多余的元素会以默认值填充;如果新数组的长度小于原数组的长度,则只复制前部分元素。

Arrays.copyOf 方法的基本语法如下:

arr1_copy = Arrays.copyOf(arr1, new_length);
  • arr1:是需要拷贝的原数组。
  • new_length:是拷贝后的新数组的长度。如果不指定此参数,将使用原数组的长度。

Arrays.copyOf 返回的是一个新的数组对象,所以改变返回数组中的元素值不会影响原来的数组。

注意:数组当中存储的是基本类型数据时,不论怎么拷贝基本都不会出现什么问题,但如果存储的是引用数据类
型,拷贝时需要考虑深浅拷贝的问题,后面文章会进行讲解。

实现自己版本的拷贝数组

public static int[] copyOf(int[] arr) {int[] ret = new int[arr.length];for (int i = 0; i < arr.length; i++) {ret[i] = arr[i];} return ret;
}

1.3 求数组中的平均值

给定一个整型数组, 求平均值

public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.println(avg(arr));
}
public static double avg(int[] arr) {int sum = 0;for (int x : arr) {sum += x;
} return (double)sum / (double)arr.length;
} 
// 执行结果
3.5

1.4 查找数组中指定元素(顺序查找)

给定一个数组, 再给定一个元素, 找出该元素在数组中的位置

public static void main(String[] args) {int[] arr = {1,2,3,10,5,6};System.out.println(find(arr, 10));
}
public static int find(int[] arr, int data) {for (int i = 0; i < arr.length; i++) {if (arr[i] == data) {return i;}
// 表示没有找到return -1;
} 
// 执行结果
3

1.5 查找数组中指定元素(二分查找)

针对有序数组, 可以使用更高效的二分查找

有序分为 “升序” 和 “降序”
如 1 2 3 4 , 依次递增即为升序.
如 4 3 2 1 , 依次递减即为降序

以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:

  • 如果相等,即找到了返回该元素在数组中的下标
  • 如果小于,以类似方式到数组左半侧查找
  • 如果大于,以类似方式到数组右半侧查找
public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.println(binarySearch(arr, 6));
}public static int binarySearch(int[] arr, int toFind) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (left + right) / 2;if (toFind < arr[mid]) {// 去左侧区间找right = mid - 1;} else if (toFind > arr[mid]) {// 去右侧区间找left = mid + 1;} else {// 相等, 说明找到了return mid;}} // 循环结束, 说明没找到return -1;
} 
// 执行结果
5

这个查找的效率还是很高效的,一次就可以砍掉一半的数据,并且在数据越大的时候越有优势。

1.6 数组排序(冒泡排序)

给定一个数组, 让数组升序 (降序) 排序.
算法思路

假设排升序:

  1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾

  2. 依次从上上述过程,直到数组中所有的元素都排列好

在这里插入图片描述

public static void main(String[] args) {int[] arr = {9, 5, 2, 7};bubbleSort(arr);System.out.println(Arrays.toString(arr));
}public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 1; j < arr.length-i; j++) {if (arr[j-1] > arr[j]) {int tmp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = tmp;}}} // end for
} // end bubbleSort
// 执行结果
[2, 5, 7, 9]

冒泡排序性能较低. Java 中内置了更高效的排序算法

public static void main(String[] args) {int[] arr = {9, 5, 2, 7};Arrays.sort(arr);System.out.println(Arrays.toString(arr));
}

关于 Arrays.sort 的具体实现算法,后期会有专门的篇章来讲解。

1.7 数组逆序

给定一个数组, 将里面的元素逆序排列.

思路

  • 设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素.
  • 然后让前一个下标自增, 后一个下标自减, 循环继续即可
public static void main(String[] args) {int[] arr = {1, 2, 3, 4};reverse(arr);System.out.println(Arrays.toString(arr));
}
public static void reverse(int[] arr) {int left = 0;int right = arr.length - 1;while (left < right) {int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}
}

🌤️全篇总结

通过本篇的学习,您已经掌握了Java数组的一些重要操作技巧,包括数组转字符串、数组拷贝、求平均值、顺序查找、二分查找、数组排序和数组逆序等。这些操作对于日常编程和算法设计都具有重要意义,希望您能够灵活运用这些技巧,提升自己的编程能力。

在这里插入图片描述

相关文章:

【Java探索之旅】掌握数组操作,轻松应对编程挑战

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、数组巩固练习1.1 数组转字符串1.2 数组拷贝1.3 求数组中的平均值1.4 查找数组中指…...

深入理解同步与异步编程及协程管理在Python中的应用

文章目录 1. 同步与异步函数的对比1.1 同步函数1.2 异步函数1.3 对比 2. 管理多个协程与异常处理2.1 并发执行多个协程2.2 错误处理2.3 任务取消 本文将探索Python中同步与异步编程的基本概念及其区别。还会详细介绍如何使用asyncio库来有效管理协程&#xff0c;包括任务的创建…...

Win10本地更新无法升级win11 的0x80080005解决方法

Win10本地更新无法升级win11 Visual Studio 2022 运行项目时&#xff0c;本文提供了错误“指定的程序需要较新版本的 Windows”的解决方法。 更新时提示&#xff1a;0x80080005 解决方法 1、下载Windows11InstallationAssistant.exe 【免费】Windows11InstallationAssista…...

互联网轻量级框架整合之MyBatis核心组件

在看本篇内容之前&#xff0c;最好先理解一下Hibernate和MyBatis的本质区别&#xff0c;这篇Hibernate和MyBatis使用对比实例做了实际的代码级对比&#xff0c;而MyBatis作为更适合互联网产品的持久层首选必定有必然的原因 MyBatis核心组件 MyBatis能够成为数据持久层首选框&a…...

springboot websocket 持续打印 pod 日志

springboot 整合 websocket 和 连接 k8s 集群的方式参考历史 Java 专栏文章 修改前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Java后端WebSocket的Tomcat实现</title><script type"text/javasc…...

C代码编译过程与进程内存分布

C代码编译过程 在这篇文章中&#xff0c;我们将探讨C语言代码的编译流程以及进程在运行时的内存布局。编译过程通常包括几个关键步骤&#xff1a;预处理、编译、汇编和链接。 预处理阶段主要是处理源代码文件中的宏定义、头文件包含和条件编译指令。在此阶段&#xff0c;编译…...

Windows 部署ChatGLM3大语言模型

一、环境要求 硬件 内存&#xff1a;> 16GB 显存: > 13GB&#xff08;4080 16GB&#xff09; 硬盘&#xff1a;60G 软件 python 版本推荐3.10 - 3.11 transformers 库版本推荐为 4.36.2 torch 推荐使用 2.0 及以上的版本&#xff0c;以获得最佳的推理性能 二、部…...

JS相关八股之什么是事件循环

在JavaScript中&#xff0c;“事件循环”&#xff08;Event Loop&#xff09;是一个非常重要的概念&#xff0c;它是指JavaScript引擎如何在单线程中处理异步操作的机制。单线程意味着在任意时刻&#xff0c;JavaScript代码只能执行一个任务。 一.事件循环的工作流程大致如下&…...

SpringCloud集成Skywalking链路追踪和日志收集

1. 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 2. 上传到服务器解压 在Spring Cloud项目中&#xff0c;每部署一个服务时&#xff0c;就拷贝一份skywalking的agent文件到该服务器上并解压。不管是部署…...

HTTP 域名和主机是一回事吗?有了主机和域名,如何建站?

域名不等于主机名&#xff0c;例如baidu.com是一个权威域的域名&#xff0c;但是根本没有一个主机的名字叫做baidu.com,但是dns.baidu.com就是一个主机名&#xff0c;它就是负责baidu.com的服务器的主机名&#xff0c;www.baidu.com也是一个主机名,它是百度web服务器的主机名。…...

运营干货:四个技巧掌握爆款选题方法

在运营工作中&#xff0c;选题是一项至关重要的工作&#xff0c;选对了一个热门话题&#xff0c;就能吸引大量用户的关注和互动&#xff0c;从而取得更好的运营成果。 今天&#xff0c;就给大家分享四个爆款选题方法&#xff0c;让大家的运营更上一层楼&#xff01; 第一种&a…...

柯桥商务口语之怎么样说英语更加礼貌?十个礼貌用语get起来!

当你在国外需要帮助的时候&#xff0c;这些礼貌用语真的是能够帮到你的哦 1.Would/Could you help me? 你可帮助我吗&#xff1f; 相信有些人想请求帮助的时候&#xff0c;一开口就用Can you&#xff0c;这个用在朋友或者熟人上面当然是没有问题的&#xff0c;但是如果是向…...

嵌入式工程师如何摸鱼?

有老铁问我&#xff0c;做嵌入式开发要加班吗&#xff1f; 也不知道搞什么鬼&#xff0c;现在的年轻人对加班这么抵触。 我刚做开发那会&#xff0c;啥也不懂&#xff0c;每天基本都要加班到晚上7-9点不等&#xff0c;我并不抵触加班&#xff0c;因为早早回家&#xff0c;也没什…...

C++语言题库(一)—— 基本知识类

目录 1. Hello World! 2. 据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高&#xff0c;请你计算其标准体重应该是多少&#xff1f; 3. 给定一个华氏温度F…...

gemini1.5 API调用

https://ai.google.dev/pricing?hlzh-cn 查询可用的model https://generativelanguage.googleapis.com/v1beta/models?keyxxx 使用postman调用 https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?keyxxx https://ai.google…...

C++从入门到精通——const与取地址重载

const与取地址重载 前言一、const正常用法const成员函数问题const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗总结 二、取地址及const取地址操作符重载概…...

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前&#xff0c;先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…...

C++11 Thead线程和线程池

参考资料&#xff1a; 2、5.lock_guard 与 std::unique_lock-陈子青的编程学习课堂 (seestudy.cn) 3、C11 多线程编程-小白零基础到手撕线程池_哔哩哔哩_bilibili 一、 C11 Thead线程库的基本使用 # include <thread> std::thread t(function_name, args...); // 线…...

Windows版Apache 2.4.59解压直用(免安装-绿色-项目打包直接使用)

windows下Apache分类 Apache分为 安装版和解压版 安装版: 安装方便&#xff0c;下一步------下一步就OK了&#xff0c;但重装系统更换环境又要重新来一遍&#xff0c;会特别麻烦 解压版&#xff08;推荐&#xff09;&#xff1a; 这种方式&#xff08;项目打包特别方便&#x…...

刀具表面上的微结构

刀具表面微结构通常指在刀具表面对特定功能设计的微观纹理&#xff0c;这些纹理可以是沟槽、凹坑、凸起或任何其他形式的微观图案。这些微结构的设计和应用是为了改善刀具的切削性能&#xff0c;减少切削力和切削温度&#xff0c;提高切削效率和精度&#xff0c;同时降低切削液…...

css3实现微信扫码登陆动画

在做微信扫码登陆时&#xff0c;出现一个背景光图上下扫码动画&#xff0c;用css3图片实现。 实现原理&#xff1a; 1.准备一个渐变的背景.png图 2.css动画帧实现动画 看效果&#xff1a; css代码&#xff1a; #wx-scan{position: absolute;top:0px;left: 50%;z-index: 3;ma…...

vue3 导入excel数据

所需包 "xlsx": "^0.18.5"页面导入包 import * as XLSX from xlsx; import {genFileId, UploadProps, UploadRawFile,ElTable } from element-plus;页面 <el-upload accept".xlsx" :on-change"changeExcel" :on-exceed"ha…...

C# linq 根据多字段动态Group by

实现类&#xff1a; public static class LinqHepler {/// <summary>/// 根据单个字段动态Group/// </summary>/// <typeparam name"T"></typeparam>/// <param name"source"></param>/// <param name"prop…...

C语言学习/复习22----阶段测评编程题

一、阶段测评练习 题1&#xff1a; 题2&#xff1a;...

LeetCode-1766. 互质树【树 深度优先搜索 广度优先搜索 数组 数学 数论】

LeetCode-1766. 互质树【树 深度优先搜索 广度优先搜索 数组 数学 数论】 题目描述&#xff1a;解题思路一&#xff1a;DFS 中记录节点值的深度和编号&#xff0c;回溯写法。关键点是1 < nums[i] < 50解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1…...

“数据安全服务能力”评定资格认证!不容错过

数据安全服务能力评定是指对数据安全服务提供商从事数据安全服务综合能力的评定&#xff0c;包括技术能力、服务能力、质量保证能力、人员构成与素质、经营业绩、资产状况等要素。 一、能力评定类型与等级 数据安全服务能力分为二个类型&#xff1a;数据安全评估、数据安全建…...

【MATLAB 分类算法教程】_3麻雀搜索算法优化支持向量机SVM分类 - 教程和对应MATLAB代码

分类代码案例3:麻雀搜索算法优化支持向量机SVM分类 - MATLAB完全代码教程 1. 初始化代码2.读取数据代码3.数据预处理代码4.利用麻雀搜索算法SSA求解最佳的SVM参数c和g代码5.根据最佳的参数进行SVM模型训练代码6.SVM模型预测代码7.准确率分析以及分类结果对比作图代码本文以红酒…...

利用机器学习库做动态定价策略的例子

动态定价是一个复杂的问题&#xff0c;涉及到市场需求、库存、竞争对手行为、季节性因素等多个变量。在实际应用中&#xff0c;动态定价通常需要复杂的模型和大量的数据分析。我选择使用Python&#xff08;Golearn库&#xff09;进行机器学习模型的训练和部署&#xff0c;而将G…...

Tcpdump -r 解析pcap文件

当我们使用命令抓包后&#xff0c;想在命令行直接读取筛选怎么办&#xff1f;-r参数就支持了这个 当你使用 tcpdump 的 -r 选项读取一个之前捕获的数据包文件&#xff0c;并想要筛选指定 IP 地址和端口的包时&#xff0c;你可以在命令中直接加入过滤表达式。这些过滤表达式可以…...

[dvwa] sql injection(Blind)

blind 0x01 low 1’ and length(version()) 6 # syntax: substr(string , from<start from 1>, cut length) 1’ and substr(version(),1,1) ‘5’ # 1’ and substr(version(),2,1) ‘.’ # 1’ and substr(version(),3,1) ‘7’ # 1’ and substr(version(),4,…...

江苏省城乡建设厅建设网站/沈阳seo优化

bios设置中文翻译的操作教程阅读&#xff1a;621时间&#xff1a;2019-10-11 14:22:53不少用户在使用U盘重装系统时经常都被bios设置里的那些英文字母给难住了&#xff0c;其实我们只需要动手稍微设置下就可以显示出中文翻译哦&#xff0c;相信大多数小伙伴都还不知道这个神…...

偃师网站制作/长沙互联网推广公司

本系列文章&#xff0c;将整理一系列Linux环境下进程相关的操作命令&#xff0c;包括进程启动、kill、挂起、查看、前后台进程切换等各种命令。本文为本系列的第五篇&#xff0c;进程的剥离&#xff0c;关注如何将某个shell下启动的进程与该shell&#xff08;终端&#xff09;去…...

做网站会什么/seo推广的网站和平台有哪些

点击上面微信号关注我关注我哟每天中午12&#xff1a;00-2&#xff1a;00定期推送文章&#xff0c;喜欢的可以设置星标&#xff0c;并分享点赞我们的文章&#xff0c;非常感谢大家的支持&#xff0c;您的点击的在看就是我们的动力&#xff01;前边两篇我们分享了选择题和判断题…...

wordpress javascript/自媒体平台排名前十

1.shell简介Shell本身是一个用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁。Shell既是一种命令语言&#xff0c;又是一种程序设计语言。作为命令语言&#xff0c;它交互式地解释和执行用户输入的命令&#xff1b;作为程序设计语言&#xff0c;它定义了各种变量和参数&…...

佛山正规网站建设哪家好/网站推广app下载

我已经阅读了this问题和一些类似的问题,我想知道是否有任何情况我应该在单例模式上使用静态类&#xff1f;解决方法:当您使用“只是代码”方法时,使用静态“实用程序”类(只有静态方法的类) – 您不需要任何特定的基类或接口实现的方法.关键指标是代码是无状态的 – 即类中没有…...

个人网站建设方案书 备案/优化大师怎么样

prototype和__proto__的区别 每个对象都有__proto__ 只有函数对象才有prototype在对象创建时&#xff0c;就会有一些预定义的属性&#xff0c;其中定义函数的时候&#xff0c;这个预定义属性就是prototype,这个prototype是一个普通的对象&#xff0c;而定义普通的对象的时候&a…...