一维数组 ——Java

2023-11-04

 目录

前言

一、一维数组的声明及初始化

1.一维数组的声明​​​​​​​

2.一维数组的初始化

2.1静态初始化

2.2动态初始化

二、访问数组元素

1.添加元素

2.遍历数组

2.1 for循环

2.2 foreach 循环(增强for循环)

2.3 for循环 和 foreach 的使用经验

三、一维数组的拷贝

1.浅拷贝

2.深拷贝

四、一维数组的扩容

1.扩容数组——方式1

2.扩容数组——方式2

五、一维数组的删除

1.删除数组中元素——方式1

2.删除数组中元素——方式2

总结



前言

数组是一种数据结构,是存放一组相同数据类型的数据的容器,可以通过操作数组对数据进行增删改查。数组是引用数据类型,初始化后开辟的空间在内存中是连续的,并且数组一旦初始化后,长度是不可改变的(数组不可直接扩容或者删除),不过可以改变数组中的元素。元素是存入数组的数据,元素在数组中的下标从0开始。


提示:以下是本篇文章正文内容,下面案例可供参考

一、一维数组的声明及初始化

1.一维数组的声明

数组的声明方式有两种:
    1.数据类型[] 变量名;
    2.数据类型 变量名[];

代码示例如下:声明一个数据类型为String的一维数组,数组名为 names1

//方式1:
String[] names1;

//方式2:
String names2[];

(建议使用方式1,因为它将数据类型与变量名清晰地分开,后面的代码举例都使用方式1)

以上的代码语句,只声明了String类型的数组变量names1,并没有初始化数组。

2.一维数组的初始化

声明数组并不是真正的数组,需要使用new操作符将创建数组。

数组的初始化分为静态初始化和动态初始化。

2.1静态初始化

一开始只知道数组的元素,由系统自动分配数组的长度

代码示例如下:

/*
静态初始化
*/

//方式1:
String[] names1 = new String[] {"元素0","元素1","元素2","元素3","元素4"};
		
//方式2: 先声明,再初始化
String[] names2;
names = new String[] {"元素0","元素1","元素2","元素3","元素4"};
		
//方式3:(写法简洁)
String[] names3 = {"元素0","元素1","元素2","元素3","元素4"};

2.2动态初始化

一开始就知道数组的长度,可以使用动态初始化。

代码示例如下:

//动态初始化:一个长度为5的String类型的数组,可以存放5个字符串
String[] names = new String[5];

动态初始化系统会为这个新创建的数组赋予默认值:

整数类型:0

浮点类型:0.0

字符类型:" "(空格)

引用数据类型:null

boolean:false

//可使用for循环遍历数组验证系统赋予默认值
for (int i = 0; i < 5; i++) {
    System.out.println(names[i]);
}

二、访问数组元素

1.添加元素

数组的元素的下标范围:0~数组长度-1

不符合数组下标范围的操作会产生数组下标越界异常——ArrayIndexOutOfBoundsException。

代码示例如下:


//动态初始化:
String[] names = new String[5];

//计算数组的长度
int length = names.length;
System.out.println("数组长度:" + length);//数组长度:5
		
//通过下标设置元素
names[0] = "元素1";
names[1] = "元素2";
names[2] = "元素3";
names[3] = "元素4";
names[4] = "元素5";
		
//通过下标获取元素
String n = names[1];
System.out.println(n);//元素2

2.遍历数组

2.1 for循环

//遍历 -- for循环
for (int i = 0; i < names.length; i++) {
    System.out.println(names[i]);
}

2.2 foreach 循环(增强for循环)

//遍历 -- foreach
for (String string : names) {
	System.out.println(string);
}

2.3 for循环 和 foreach 的使用经验

遍历时需要操作下标的功能,就使用for循环

遍历时无需操作下标的功能,就使用foreach

通常来说,foreach更加简洁、更不易出错,无需担心数组下标的问题

三、一维数组的拷贝

在Java中允许将一个数组变量拷贝到另一个数组变量。

1.浅拷贝

//原数组:
String[] names = {"元素0","元素1","元素2","元素3","元素4"};
	
//复制新数组
String[] namesCopy = names;

这种拷贝将names的内存地址交给namesCopy引用,也就是说两个数组(names和namesCopy)引用同一个数组。

2.深拷贝

//1.原数组:静态初始化
String[] names = {"元素0","元素1","元素2","元素3","元素4"};
		
//2.新数组:动态初始化
String[] namesCopy = new String[names.length];
		
//3.将原数组中数据内容逐个放置到新数组中
for (int i = 0; i < namesCopy.length; i++) {
	namesCopy[i] = names[i];
}

这种拷贝创建初始化了一个新的数组namesCopy,两个数组变量引用两个内存地址不同的数组。

四、一维数组的扩容

1.扩容数组——方式1

思路:在原有拷贝的基础上,增大新数组的容量(长度)。

/*
    将原数组扩容为原来的1.5倍
*/

//1.原数组
String[] names = {"元素0","元素1","元素2","元素3","元素4"};
		
//2.定义新数组容量(原数组的1.5倍)
int oldCapacity = names.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
		
//3.动态初始化新数组
String[] namesCopy = new String[newCapacity];
		
//4.复制原数组中数据到新数组
for (int i = 0; i < names.length; i++) {
	namesCopy[i] = names[i];
}
		
//5.将新数组引用赋给原数组
names = namesCopy;

扩容后多余的数组容量中存放的是该数组类型的系统默认值,例如String类型系统默认值为null。

2.扩容数组——方式2

值得了解的是,扩容和拷贝可以使用Arrays工具类中的copyOf方法,代码如下:

//1.原数组 
String[] names = {"元素0","元素1","元素2","元素3","元素4"};
			
//使用Arrays类中的copyOf方法(可通过API查询使用方法)
names = Arrays.copyOf(names, 6);

五、一维数组的删除

1.删除数组中元素——方式1

思路:利用数组的拷贝

//原数组   
String[] names = {"元素0","元素1","元素2","元素3","元素4"};
		
//动态初始化新数组
String[] newNames = new String[names.length-1];
		
//遍历数组,将原数组复制到新数组中
int index = 0;
for (String element : names) {
	if(!element.equals("元素2")) {
    	newNames[index] = element;
		index++;
	}
}
			
//将新数组的引用赋给原数组
names = newNames;

2.删除数组中元素——方式2

思路:将 要删除的元素 之后的所有元素整体向前迁移(覆盖)该元素。

//1.原数组
String[] names = {"元素0","元素1","元素2","元素3","元素4"};
		
//2.数据向前迁移一个(覆盖)
for (int i = 2; i < names.length-1; i++) {
	names[i] = names[i+1];
}

//3.将最后一个元素设置为null
names[names.length-1] = null;


总结

以上就是今天要讲的内容,本文仅仅简单介绍了一维数组,更多操作数组的方法可以通过查询API文档进行学习探索。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一维数组 ——Java 的相关文章

随机推荐

  • Labview设计计算机--组合逻辑与时序逻辑(5)

    在写接下来的内容之前 我要强烈推荐一部书 编码 隐匿在计算机软硬件背后的语言 这是一本由浅入深的书 我也是借鉴了书中的很多想法才有勇气尝试在Labview上构建一个简单的计算机 看这本书的门槛不高 大概有高中知识就差不多了 ok 进入正题
  • angular下载文件

    1 window open 打开新页面下载文件 window open url self 优点 最简洁 缺点 当参数错误时 或其它原因导致接口请求失败 这时页面会停留在新打开的页面中 无法监听到接口返回的错误信息 只在页面中直接输出错误 尽
  • 查看linux安装了哪些编译器,如何查看linux已安装的编译器及其版本

    在Linux环境下 新建一个终端 之后在终端直接输入命令 arm linux gcc v 回车之后 即可出现如下的一些信息 此处安装的是交叉编译器gcc 版本4 2 2 Using built in specs Target arm unk
  • 超详细,AI绘画里你不得不知道的SD算法详解

    前言 哈喽 各位小伙伴们大家好 说到AI绘画 可谓是近几年来异军突起 犹如洪水猛兽一般 各种的本土化 商业化 但是相信也有很多朋友跟我一样 对AI绘画的原理一知半解 甚至根本不知道它是怎么工作的 这样只靠着在网上复制粘贴别人的prompt
  • java自学笔记6:UML简介+阶段练习

    1 UML概念 Unified Modeling language UML 又称统一建模语音或标准建模语言 是一个支持模型化和软件系统开发的图形化语言 为软件开发的所有阶段提供模型化和可视化支持 2 UML图示 UML2 2中一共定义了14
  • 使vue组件居中、中下

    position absolute left 50 top 50 transform translate 50 50 中下 居中往下 login form position absolute 绝对定位 bottom 0px 最底下 widt
  • 相机成像 - ISP之RGB域处理

    在之前的文章中 介绍了ISP 的基本流程和RAW域中的处理方法 完美成像中最重要的环节 ISP之RGB域处理 今天延续之前的内容 讲解中间的部分 RGB域的处理 ISP的流程具体如图所示 我们继续围绕这个图把RGB域中每个部分的处理给大家讲
  • 【最远点采样FPS】点云采样方式(一) — 最远点采样

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 点云最远点采样FPS
  • CC2640R2F低功耗蓝牙芯片相关设计分享

    电路设计简介 CC2640 的 RF 差分线越短越好 做差分 100 阻抗匹配 天线部分阻抗 50 欧姆匹配 本次设计采用了陶瓷天线 AN9520 245 减少天线面积 蓝牙芯片在底层 阻抗参考平面第三层 在天线部分下方覆铜 GND 使用嘉
  • nginx配置部署一个域名,多个端口

    最近用基于windows下的nginx部署了服务器 1 安装好windows下的nginx以后 会有以下文件 找到conf下的nginx 此文件为nginx的配置文件 2 初始只有一个默认80端口 这是nginx的默认端口号 server
  • 高并发的epoll+线程池,业务在线程池内

    epoll是linux下高并发服务器的完美方案 因为是基于事件触发的 所以比select快的不只是一个数量级 单线程epoll 触发量可达到15000 但是加上业务后 因为大多数业务都与数据库打交道 所以就会存在阻塞的情况 这个时候就必须用
  • Web服务器

    文章目录 1 HTTP 协议 1 1 概述 1 2 URI和URL的区别 1 3 请求消息 Request 1 4 响应消息 Response 1 5 状态码 1 6 HTTP 1 0 和 HTTP 1 1 1 7 Cookie 1 8 S
  • Spring是如何支持多数据源的

    大家好 我是课代表 欢迎关注我公众号 Java课代表 上篇介绍了数据源基础 并实现了基于两套DataSource 两套mybatis配置的多数据源 从基础知识层面阐述了多数据源的实现思路 不了解的同学请戳 同学 你的多数据源事务失效了 正如
  • 9.5位操作(二)——给定一个介于0和1之间的实数,类型为double,打印它的二进制表示

    功能 给定一个介于0和1之间的实数 类型为double 打印它的二进制表示 如果该数字无法精准地用32位以内的二进制表示 则打印 ERROR 两种方法 方法一 将数字乘以2以后 与1比较 public static String print
  • QT字节数组类QByteArray

    QT字节数组类QByteArray 初始化 访问某个元素 截取字符串 获取字节数组的大小 数据转换与处理 Hex转换 数值转换与输出 字母大小写转换 字符串数值转化为各类数值 QBQyteArray和char 互转 QByteArray 和
  • CentOS 安装 Jenkins

    本文目录 1 安装 JDK 2 获取 Jenkins 安装包 3 将安装包上传到服务器 4 修改 Jenkins 配置 5 启动 Jenkins 6 打开浏览器访问 7 获取并输入 admin 账户密码 8 跳过插件安装 9 添加管理员账户
  • Linux防火墙的配置

    Linux防火墙的配置 防火墙是一种网络安全设备 可用于保护网络中的计算机和其他设备免遭来自互联网或其他网络连接的未授权访问 其主要作用是监控网络流量 根据预先设定的规则对网络流量进行过滤 以防止未经授权的访问 攻击和病毒等威胁 在Linu
  • pip安装pyspark报错

    报错 Traceback most recent call last File
  • UG/NX二次开发Siemens官方NXOPEN实例解析—1.3 BlockStyler/ExtrudewithPreview

    列文章目录 UG NX二次开发Siemens官方NXOPEN实例解析 1 1 BlockStyler ColoredBlock UG NX二次开发Siemens官方NXOPEN实例解析 1 2 BlockStyler EditExpress
  • 一维数组 ——Java

    目录 前言 一 一维数组的声明及初始化 1 一维数组的声明 2 一维数组的初始化 2 1静态初始化 2 2动态初始化 二 访问数组元素 1 添加元素 2 遍历数组 2 1 for循环 2 2 foreach 循环 增强for循环 2 3 f