【Java初阶(四)】数组的定义和使用

❣博主主页: 33的博客❣
▶文章专栏分类: Java从入门到精通◀
🚚我的代码仓库: 33的代码仓库🚚

目录

  • 1.前言
  • 2.数组的概念
    • 2.1数组的初始化
    • 2.2数组的使用
      • 2.2.1数组元素访问
      • 2.2.2遍历数组
  • 3.数组是引用类型
    • 3.1实例
    • 3.2 认识null
  • 4.数组的应用
    • 4.1 二分查找
    • 4.2 冒泡查找
    • 4.3 Arrays.sort()
    • 4.4数组的拷贝
    • 4.5copyOf拷贝
  • 5.二维数组
  • 6.总结

1.前言

本章重点:

1.理解数组基本概念
2. 掌握数组的基本用法
3. 数组与方法互操作
4. 熟练掌握数组相关的常见问题和代码


2.数组的概念

数组:相同类型元素的一个集合,在内存中是一段连续的空间。

2.1数组的初始化

数组的创建:

T[] 数组名=new T[N];

**T:**表示数组中存放元素的类型
T[]:表示数组的类型
**N:**表示数组的长度
例:

int[] array1 = new int[10];       // 创建一个可以容纳10个int类型元素的数组
double[] array2 = new double[5];  // 创建一个可以容纳5个double类型元素的数组

数组的初始化:

int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
int[] array1 = {0,1,2,3,4,5,6,7,8,9};//省略了new int[]

2.2数组的使用

2.2.1数组元素访问

数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

int[]array = new int[]{10, 20, 30, 40, 50};System.out.println(array[0]);System.out.println(array[1]);System.out.println(array[2]);System.out.println(array[3]);System.out.println(array[4]); System.out.println(array[5]); //有5个元素,下标最大只能为4,array[5]则越界了
// 也可以通过[]对数组中的元素进行修改array[0] = 100;System.out.println(array[0])

2.2.2遍历数组

int[]array ={10, 20, 30, 40, 50};
//用for循环遍历for(int i = 0; i < 5; i++){System.out.println(array[i]);}
//用 for-each遍历for (int x : array) {System.out.println(x);}
//toString遍历
System.out.println(Arrays.toString(array));//需要导入java.util.Arrays包

3.数组是引用类型

内存是一段连续的存储空间,主要用来存储程序运行时数据的。比如:

  1. 程序运行时代码需要加载到内存
  2. 程序运行产生的中间数据要存放在内存
  3. 程序中的常量也要保存
  4. 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁

3.1实例

int[]array  = {10, 20};

在这里插入图片描述


3.2 认识null

 int[] arr = null;System.out.println(arr[0]);

null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用。一旦尝试读写, 就会抛出 NullPointerException,空指针异常。


4.数组的应用

4.1 二分查找

二分查找只针对有序数组,查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:
如果相等,即找到了返回该元素在数组中的下标
如果小于,以类似方式到数组左半侧查找
如果大于,以类似方式到数组右半侧查找

public class Tsest {public static int find(int[] arr,int a){int l=0;int mid=-1;int r= arr.length-1;while(l<=r){mid=(l+r)/2;if(arr[mid]==a){System.out.println("找到了");return mid;}if(arr[mid]<a){l=mid+1;}if(arr[mid]>a){r=mid-1;}}if(l>r){System.out.println("没有找到");}return-1;}public static void main(String[] args) {int[] arr={1,2,3,4,5};int x=find(arr,6);System.out.println(x);}
}

4.2 冒泡查找

给定一个数组, 让数组升序 (降序) 排序,将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾2. 依次从上上述过程,直到所有元素都排好。

 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;}// 执行结果
5public 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;}}} }

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


4.3 Arrays.sort()

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

4.4数组的拷贝

//错误的做法,依然执行同一个对象
int[] arr = {1,2,3,4,5,6};int[] newArr = arr
//正确的做法
public static int[] coppy(int[] arr){int[] arr1=new int[arr.length];for(int i=0;i< arr.length;i++){arr1[i]=arr[i];}return arr1;
}public static void main(String[] args) {int[] arr={8,5,3,1,9};int[] arr2=coppy(arr);System.out.println(Arrays.toString(arr));System.out.println(Arrays.toString(arr2));
}

也使用Arrays中copyOf方法完成数组的拷贝


4.5copyOf拷贝

int[] arr= {1,2,3,4};
int[] newArr = Arrays.copyOf(arr, arr.length);System.out.println("newArr: " + Arrays.toString(newArr))//拷贝某一个范围int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);//范围为[2,4)System.out.println("newArr2: " + Arrays.toString(newArr2));}

5.二维数组

二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组
基本语法:

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 }

二维数组遍历:

 int[][] arr = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};for (int row = 0; row < arr.length; row++) {for (int col = 0; col < arr[row].length; col++) {System.out.printf("%d\t", arr[row][col]);}System.out.println("");}// 执行结果
1       2       3       45       6       7       89       10      11      1

二维数组的用法和一维数组并没有明显差别, 因此我们不再赘述。


6.总结

本篇文章主要介绍了数组基本概念,数组的基本用法,数组与方法互操作,还有一些在数组中常见的代码,数组中还有一些方法博主没有介绍到,感兴趣的同学可以通过其他博主的文章进行学习。

下期预告:类和对象

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

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

相关文章

AQS源码分析

前言 AbstractQueuedSynchronizer是抽象同步队列&#xff0c;其是实现同步机器的基础组件&#xff0c;并发包中的锁的底层就是使用AQS实现的。AQS中 维护了一个volatile int state&#xff08;代表共享资源&#xff09;和一个FIFO线程等待队列&#xff08;多线程争用资源被阻塞…

MySQL面试题--开发(最全,涵盖SQL基础、架构、事务)

MySQL面试题--事务https://mp.csdn.net/mp_blog/creation/editor/136947072 MySQL面试题--MySQL内部技术架构https://blog.csdn.net/Timebro/article/details/136946046?spm1001.2014.3001.5501 MySQL面试题--最全面-索引https://blog.csdn.net/Timebro/article/details/136…

计算机实体安全

计算机实体安全定义&#xff1a; 对场地环境、设施、设备和载体、人员采取的安全对策和措施。 一、计算机可靠性与故障分析 1.1 计算机的可靠性 可靠性 (狭义) ■计算机在规定时间与条件下完成规定功能的 概率 ■规定条件&#xff1a;环境条件&#xff0c;使用条件&#xff0…

软件高级:软件架构评估-基于场景的评估方法

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Android Studio 和 lombok 的版本适配、gradle依赖配置、插件安装及使用

文章目录 Intro注意事项Android Studio 和 lombok 的版本选择及下载下载链接 在 Android Studio 中安装一次 lombok 插件在每个 gradle 项目中添加 lombok 相关依赖(如要用到)使用ref Intro 用惯了 JavaMavenIDEA 开发后端服务&#xff0c;突然有一天用 JavaGradleAndroidStud…

C# WPF编程-事件

C# WPF编程-路由事件 路由事件概要路由事件的三种方式 WPF事件WPF最重要的5类事件&#xff1a;生命周期事件 鼠标事件键盘事件多点触控输入原始触控 路由事件概要 路由事件是具有更强传播能力的事件&#xff0c;它们可在元素树中向上冒泡和向下隧道传播&#xff0c;并沿着传播…

端口的学习

端口是什么口&#xff1f;【网络常识3】_哔哩哔哩_bilibili 简化后的数据包&#xff1a; 软件和端口是1对多的关系。 http默认端口是80 https默认端口是443

智慧工地解决方案,智慧工地项目管理系统源码,支持大屏端、PC端、手机端、平板端

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合&#xff0c;为工程项目管理提供先进技术手段&#xff0c;构建工地现场智能监控和控制体系&#xff0c;弥补传统方法在监管中的缺陷&#xff0c;最线实现项目对人、机、料、法、环的全…

神级工具之git (一): git 基操

一切都从&#xff1a;Git User Manual开始&#xff0c;或者中文版的Git中文手册 核心概念 工作区 工作区我们可见的&#xff0c;可以进行修改的目录树。我们可以在目录树中进行文件的查看&#xff0c;修改。通常我们会使用一个神级编辑器Vim。我给她取了个名字&#xff0c;就…

2024年C语言最新经典面试题汇总(1-10)

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

【测试开发学习历程】认识Python + 安装Python

1 认识 Python 人生苦短&#xff0c;我用 Python —— Life is short, I use Python 1.1 Python 的起源 Python 的创始人为吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;&#xff0c;江湖人称“龟叔” 1989 年的圣诞节期间&#xff0c;吉多范罗苏姆为了在荷兰首都阿姆…

mac 安装 nvm 【真解决问题】

前提 没有node环境已有git 下载 我用的gitee极速下载 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags配置 1. 配置变量 在用户的目录下新增文件 .zshrc export NVM_DIR"$HOME/…

unity学习(67)——控制器Joystick Pack方向

1.轮盘直接复制一个拖到右边就ok了&#xff0c;轮盘上是有脚本的。&#xff08;只复制&#xff09; 2.上面的显示窗也可以复制&#xff0c;但是要绑定对应的轮盘&#xff08;unity中修改变量&#xff09;&#xff0c;显示窗上是有脚本的。&#xff08;复制改变量&#xff09; 3…

康奋威科技邀您到场参观2024长三角快递物流展

参展企业介绍 杭州康奋威科技股份有限公司创立于2005年&#xff0c;由国家“万人计划”专家任天挺先生创立并担任法人&#xff0c;是一家专业从事智能装备研发与制造的国家级高新技术企业。专注于自动化控制、机械设计、信息化方面的技术研究&#xff0c;主要为太阳能光伏、智…

计算机底层结构

一、人类关于计算领域的发展 人类的祖先从树上下来以后开始了一轮新的生存挑战。与其他动物相比人类没有尖牙厉爪&#xff0c;只能去发展大脑&#xff0c;随着大脑的发展人类逐渐的站在了食物链的顶层。但是受制于人类活动和自然因素的发展&#xff0c;许多大型动物越来越少&a…

【动态规划】Leetcode 70. 爬楼梯

【动态规划】Leetcode 70. 爬楼梯 解法1 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 输入…

CICD流水线(ali)

后端CICD 一、打开云效流水线&#xff0c;创建流水线

【2024第十二届“泰迪杯”数据挖掘挑战赛】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛B题 解题全流程&#xff08;持续更新&#xff09; -----基于多模态特征融合的图像文本检索 一、写在前面&#xff1a; ​ 本题的全部资料打包为“全家桶”&#xff0c; “全家桶”包含&#xff1a;数据、代码、模型、结果csv、教程…

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i 运行测试

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i 运行测试 1 Prerequisites1.1 C11 or C0x Compiler1.2 Pangolin1.3 OpenCV1.4 Eigen3 2 安装 Intel RealSense™ SDK 2.02.1 测试设备2.2 编译源码安装 (Recommend)2.3 预编译包安装 3 编译 ORB-SLAM34 使用 D435i …

网络学习:RIPNG

目录 前言&#xff1a; 一、RIPNG与RIP的区别 二、如何配置RIPNG 如何解决RIPNG环路问题呢&#xff1f; 控制RIPNG的选路 1、修改RIPNG默认优先级 2.配置接口附加开销值从而干涉RIPNG的选路 RIPNG拓展配置 1.RIPNG的认证 配置RIPNG进程下的IPsec认证&#xff1a; 配…