【Java篇】备战面试——你真的了解“数组”的吗?

news2025/7/22 21:06:40

目录

数组概念

声明数组

数组默认值     

数组拷贝及数组类型VS基本类型

Arrays类

二维数组


数组概念

        在JAVA语言中数组是一种数据结构,是用来存储同一类型数据的集合或者序列,我们可以通过整型下标(index,异或索引)去访问或遍历数组中的任意值。例如a是一个整型数组,a[i]就是访问树祖宗下标为i的元素;

声明数组

        我们想要使用数组这一数据结构就需要提前声明数组,在Java中声明数组有三种方式(以整型数组为例);

/*方式一*/
int[] arr = {1,2,3,4,5};
/*方式二*/
int[] arr = new int[]{1,2,3,4,5};
/*方式三*/
int[] arr = new int[5];
      arr[0]=1; arr[1]=2; arr[2]=3; arr[3]=4; arr[4]=5;

        其中第一、二种,是你预先知道数组的内容,而第三种都是你先创建爱你长度为5的数组,然后逐一复制;这里有一个小细节,不能在给定初始值的同时设置长度,即一下格式不允许:

数组默认值     

        在不同类型的数组在没有为元素赋值之前,数组中的元素都是由默认值的,整型数组默认值为0、boolean类型数组默认值为false、对象类型数组默认值为null

数组拷贝及数组类型VS基本类型

        在内存层面数组类型和基本类型有所不同,基本类型在内存中只对应一块空间,但是数组有两块一块用来存储数组内容本身,另一块用来存储内容的位置也就是地址值(首元素arr[0]的地址值),为什么会这样呢?我们看如下代码:(这串代码是可运行的)

int[] arrA = {1,2,3};
int[] arrB = {1,2,3,4};
arrA = arrB;

        这段代码中,arrA初始的长度是3,arrB的长度是4,将arrB的值赋给了arrA。如果arrA对应的内存空间是直接存储的数组内容,那么它将没有足够的空间去容纳arrB的所有元素。
        用两块空间存储就简单得多,arrA存储的值就变成了和arrB的一样,存储的都是数组内容(4,5,6,7)的地址,此后访问arrA就和arrB是一样的了,而arrA (1,2,3)的内存空间由于不再被引用会进行垃圾回收;
        由此可以看出,给数组变量赋值和给数组中元素赋值是两回事,给数组中元素赋值是改变数组内容,而给数组变量赋值则会让变量指向一个不同的位置(指向首元素的地址)
        上面我们说数组的长度是不可以变的,不可变指的是数组的内容空间,一经分配,长度就不能再变了,但可以改变数组变量的值,让它指向一个长度不同的空间,就像上例中arrA后来指向子arrB一样。

Arrays类

        对数组进行操作的辅助类,实现了对数组的常用操作。

sort 方法:可以对数组排序,默认数组数值从小到大排列,用户可以自定义排列顺序,

Arrays.sort(arr);                                    

copyOf/copyOfRange 方法:复制数组。底层调用 System.arrayCopy 的本地方法实现,常用于数组扩容。

int[] arr1 = Arrays.copyOf(arr, 10);                  // 复制数组:前 10 个单位
int[] arr2 = Arrays.copyOf(arr, 0, arr.length);       // 复制数组:从 0 到 arr.length - 1

asList 方法将数组转化为列表(List 类),但数组数据必须是包装类型。

调用该方法将数组转换为列表后,在内存中实际还是以数组形式存储。这可能会导致以下两个问题:

  1. 调用 List 类的 add 方法向列表中插入数据,会导致异常;
  2. 对原数组进行更改,也会导致列表中的数据发生变化。
arr[] = new Integer[]{1, 2, 3, 4};                    // 数组必须是包装数据类型
List list = Arrays.asList(arr);                       // 将数组转换为集合(有问题)               
List list = new ArrayList<>(Arrays.asList(arr));      // 将数组转换为集合(推荐) 

二维数组

         Java中其实是没有二维数组的,只不过java的一维数组可以看成是一个对象,那么这样我们就可以将几个一维数组当做元素(对象)存储到另一个一维数组中就得到了我们要的二维数组。

        二维数组的元素个数 = 二维数组中一维数组(元素)的个数 = arr.length;
        二维数组的每个元素是一维数组, 所以如果需要得到每个一维数组中的元素,还需要再次遍历;因为第一次我们得到的只是一个对象,想要具体值还要继续遍历;

语法格式

int[][]  名称 = new int[行数][列数];

示例: 以下三种方式都正确;

int[][] arr = new int[2][3];
int[][] arr = new int[3][];
int[][]	arr = {{1,2,3}, {4,5}, {5,6,7,8}};



 

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

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

相关文章

Centos7 docker搭建onlyoffice

注意&#xff1a;本文的命令使用的是 root 用户登录执行&#xff0c;不是 root 的话所有命令前面要加 sudo 一、安装docker 1、更新 yum 包&#xff08;使用 root 权限&#xff0c;生产环境中此步操作需慎重&#xff09; yum -y update yum -y update 升级所有包同时也升级软…

Set接口和常用方法

Set接口基本介绍 无序&#xff08;添加和取出顺序不一样&#xff09;&#xff0c;没有索引不允许重复元素&#xff0c;所以最多包含一个nullSet接口的常用方法和List一样&#xff0c;Set接口也是Collection的子接口&#xff0c;因此&#xff0c;常用方法和Collection接口一样 …

【C++】类与对象基本知识 (构造 析构 拷贝 explicit 对象数组 动态静态对象)

目录 1.类与对象基本概念 2.构造函数 3.析构函数 4.构造和析构函数调用顺序 5.拷贝构造函数 6.浅拷贝和深拷贝 7.初始化列表 8.explicit防止构造函数隐式转换 9.对象数组 10.动态对象 10.1 动态对象创建 10.2 动态对象数组 11.静态成员 11.1 静态成员变量 11.2 …

Java学习笔记(三)

Java学习笔记(三) 文章目录Java学习笔记(三)1 常用API1.1 类 Math1.1.1 abs1.1.2 ceil和floor1.2 System1.2.1 exit()1.2.2 currentTimeMillis()1.2.3 arraycopy()1.3 Runtime1.4 Object1.4.1 System.out.println底层原理1.4.2 equalsString类重写的equals方法1.5 对象克隆1.5.…

代码随想录训练营第24天|回溯算法理论基础、LeetCode 77.组合

参考 代码随想录 回溯算法理论基础 什么是回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。回溯法是一种选优搜索法&#xf…

基于Matlab仿真极化双基地雷达系统以估计目标的范围和速度(附源码)

目录 一、系统设置 二、系统仿真 三、使用圆极化接收阵列 四、总结 五、程序 此示例演示如何仿真极化双基地雷达系统以估计目标的范围和速度。发射器、接收器和目标运动学被考虑在内。 一、系统设置 该系统以 300 MHz 的频率运行&#xff0c;使用线性 FM 波形&#xff0…

1526_AURIX TC275 BootROM下

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个是固件启动的流程介绍&#xff0c;在启动的过程中&#xff0c;HSM的RAM必然会被初始化掉。这个之前倒是没有注意到&#xff0c;HSM还是有专门的RAM的。自然&#xff0c;我自己接触到的…

基于springboot题库管理系统的设计与实现

目前&#xff0c;许多高校绝大多数课程还采用考教统一的模式来完成教学过程&#xff0c;这种传统的考试模式在教学到实施考试的过程带有很大的主观随意性和不规范性。另外随着各高校近年来学生规模的扩大&#xff0c;教学任务日益繁重&#xff0c;教师的工作量相应的不断增加。…

【Bio】基础生物学 - 蛋白质 protein

文章目录1. 蛋白质Ref1. 蛋白质 蛋白质是生命的物质基础&#xff0c;是有机大分子&#xff0c;是构成细胞的基本有机物&#xff0c;是生命活动的主要承担者。没有蛋白质就没有生命。 蛋白质的基本组成单位是 氨基酸 (amino acid)\blue{\text{氨基酸 (amino acid)}}氨基酸 (am…

【C++】树?堆?怎么实现?

新的一周过去了&#xff0c;大家有没有对上星期练习的题目更加熟练呢&#xff1f; 上星期和上上星期我们主要学习了顺序表&#xff0c;链表&#xff0c;和用这俩都能实现的栈和队列 那么今天我们看看堆又是什么结构 目录 1.树 介绍 2.堆 介绍 3.堆的实现 1.树の介绍 不就是树…

cartopy绘制中国降雨地图

常用的地图可视化的编程工具有 MATLAB、IDL、R、GMT、NCL 等。相比于ArcGIS、QGIS和ArcGISpro用鼠标点来点去&#xff0c;编程绘图也是有很大的优点的&#xff0c;方便&#xff0c;可批量&#xff0c;美观。 大气科学和气象的朋友们一直使用的应该是 NCL&#xff0c;易用性不错…

Windows 编写自动复制备份、删除文件定时任务脚本

目录 一、backup.bat 脚本内容如下&#xff1a; 二、脚本内容解析 1.自动生成当天日期的目录 2. 删除前 n 天的文件 forfile 命令参数说明&#xff1a; 3.复制文件到指定目录 robocopy 命令参数说明&#xff1a; 结论&#xff1a; 三、设置定时任务 1. 打开 控制面板…

【数据结构】谈谈ArrayList和LinkedList的区别

&#xff08;此图源于比特高博&#xff09; 上图简洁明了的列出了二者的不同点 下面咱们详细聊聊具体的 要问的是区别&#xff0c;问不同点&#xff0c;那就得从二者共有的但是不同的点来讨论 1.底层实现上&#xff1a;ArrayList底层是顺序表&#xff0c;采用数组结构&…

引入DDP技术:英特尔网卡让数据处理更高效

英特尔网卡引入DDP技术后&#xff0c;提高了云和NFV部署的数据包处理效率&#xff0c;按需重配置报文处理引擎&#xff0c;让数据处理更高效 ◆可编程报文处理流水线 ◆按需优化工作负载 ◆无需重启服务器 ◆设备使用更高效 ◆无缝启用新服务 Intel Ethernet 700系列产品…

谷粒商城项目总结(一)-基础篇

一、项目简介 本项目适合人群&#xff1a;学过ssm是必须的。项目里有mybatis-plus和springcloud的内容&#xff0c;你可以用本项目来做实践&#xff0c;也可以利用本项目初识cloud&#xff0c;但最好还是对微服务有一定了解。 下好了vargant&#xff0c;如果安装centos7很慢&…

是什么让 NFT 项目成为“蓝筹”?

Nov. 2022, Vincy Data Source: Footprint Analytics - Bluechip Collection 在 NFT 这样一个不稳定和新兴的行业中&#xff0c;要赋予项目为 "蓝筹 " 地位是很难的。然而&#xff0c;不少的 NFT 项目宣称自己是蓝筹项目&#xff0c;但它们是吗&#xff1f; Foot…

从零开始配置vim(29)——DAP 配置

首先给大家说一声抱歉&#xff0c;前段时间一直在忙换工作的事&#xff0c;包括但不限于交接、背面试题准备面试。好在最终找到了工作&#xff0c;也顺利入职了。期间也有朋友在催更&#xff0c;在这里我对关注本系列的朋友表示感谢。多的就不说了&#xff0c;我们正式进入vim …

【案例 5-1】 模拟订单号生成

【案例介绍】 1.任务描述 编写一个程序&#xff0c;模拟订单系统中订单号的生成。例如给定一个包括年月日以及毫秒值的 数组 arr{2019,0504,1101},将其拼接成字符串 s:[201905041101]。要求使用 String 类常用方 法来实现字符串的拼接。 2.运行结果 运行结果如图 5-1 所示 图…

【SRE】Linux加入AD域控

老牌企业一般因为安全要求或者历史遗留要求&#xff0c;会要求服务器加入AD域控 RHEL/CentOS/Ubuntu 加入 Windows ldap 域控 网上有各种各样的方法&#xff0c;很多复杂且模糊&#xff0c;操作到一大半发现没法推进&#xff0c;这个是亲测最好用的办法 使用pbis-open使Linux服…

关于Ubuntu ssh远程连接报错和无法root登录的解决方法

一、使用远程工具连接Ubuntu提示报错 MobaXterm v22.0 版本直接可以远程连接上&#xff08;前提是sshd服务是开启的状态&#xff09; 注意&#xff1a;须使用最新版本或较高版本的ssh远程连接工具&#xff0c;进行ssh连接&#xff1b;若使用较低版本的ssh远程连接工具&#xf…