精通Java数组的艺术:从初学者到高手的进阶之路(一)

news2024/11/25 8:20:35

    • ⭐ 数组
      • ⭐ 数组的定义
      • ⭐ 创建数组和初始化
      • ⭐ 数组常见操作
        • ⭐ 数组的遍历
        • ⭐ for-each 循环
        • ⭐ 数组的拷贝
        • ⭐ java.util.Arrays 类

⭐ 数组

在这里插入图片描述

数组的概念

⭐ 数组的定义

在这里插入图片描述

数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。

数组的四个基本特点:

⭐	长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
⭐	其元素的类型必须是相同类型,不允许出现混合类型。
⭐	数组类型可以是任何数据类型,包括基本类型和引用类型。
⭐	数组变量属于引用类型,数组也是对象,数组中的元素相当于对象的属性!

⭐ 创建数组和初始化

数组的声明方式(以一维数组为例)

type[]	arr_name;	// 方式一
type 	arr_name;	// 方式二

注意:

⭐	声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM 才分配空间,这时才与长度有关。
⭐	声明一个数组的时候并没有数组真正被创建。
⭐	构造一个数组,必须指定长度。

【eg】创建基本类型一维数组

	public class Test {
		public static void main(String args[ ]) {
			int[ ] s; 	// 声明数组;
			s = new int[10]; 	// 给数组分配空间;
			for (int i = 0; i < 10; i++) {
			s[i] = 2 * i + 1;//给数组元素赋值; 数组是对象,数组中的元素就是对象的属性
			System.out.println(s[i]);
		} 
	}
}

在这里插入图片描述

【eg】创建引用类型一维数组

	class Man{
		private int age;
		private int id;
			public Man(int id,int age) {
			super();
			this.age = age;
			this.id = id;
		}
}
	public class AppMain {
		public static void main(String[ ] args) {
			Man[ ] mans; //声明引用类型数组;
			mans = new Man[10]; //给引用类型数组分配空间;
			Man m1 = new Man(1,11);
			Man m2 = new Man(2,22);
			mans[0]=m1;//给引用类型数组元素赋值;
			mans[1]=m2;//给引用类型数组元素赋值;
	}
}

在这里插入图片描述

初始化

数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。

1. 静态初始化

除了用 new 关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

【eg】数组的静态初始化

int [ ] a = { 1, 2, 3 };// 静态初始化基本类型数组;
Man [ ] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组;

2.动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。

【eg】数组的动态初始化

int[ ] a1 = new int[2];//动态初始化数组,先分配空间;
a1[0]=1;//给数组元素赋值;
a1[1]=2;//给数组元素赋值;

3.数组的默认初始化

数组是对象,它的元素相当于对象的属性;每个元素也按照属性的方式被默认初始化。

【eg】数组的默认初始化

int a2[ ] = new int[2]; // 默认值:0,0
boolean[ ] b = new boolean[2]; // 默认值:false,false
String[ ] s = new String[2]; // 默认值:null, null

⭐ 数组常见操作

在这里插入图片描述

⭐	遍历指的就是“通过循环遍历数组的所有元素”。
⭐	拷贝指的是将某个数组的内容拷贝到另一个数组中

注:实质上,容器的扩容就是“数组的拷贝”。

⭐ 数组的遍历

数组元素下标的合法区间:[0, length-1]。我们可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。

【eg】使用循环初始化和遍历数组

	public class Test {
		public static void main(String[ ] args) {
			int[ ] a = new int[4];
		//初始化数组元素的值
			for(int i=0;i<a.length;i++){
			a[i] = 100*i;
	}
		//读取元素的值
		for(int i=0;i<a.length;i++){
		System.out.println(a[i]);
		}
	}
}

执行结果如下所示:
在这里插入图片描述

⭐ for-each 循环

for-each 专门用于读取数组或容器中所有的元素。

【eg】使用增强 for 循环遍历数组

	public class Test {
		public static void main(String[ ] args) {
			String[ ] ss = { "aa", "bbb", "ccc", "ddd" };
				for (String temp : ss) {
					System.out.println(temp);
		}
	}
}

执行结果如下所示:
在这里插入图片描述

注意:

🎈	for-each 增强 for 循环在遍历数组过程中不能修改数组中某元素的值。
🎈	for-each 仅适用于遍历,不涉及有关索引(下标)的操作。

⭐ 数组的拷贝

System.arraycopy(object src,int srcpos,object dest, int destpos,int length)

该方法可以将 src 数组里的元素值赋给 dest 数组的元素,其中 srcpos 指定从 src 数组的第几个元素开始赋值,length 参数指定将 src 数组的多少个元素赋给 dest 数组的元素。
在这里插入图片描述

【eg】数组的拷贝

	public class Test {
		public static void main(String args[ ]) {
			String[ ] s = {"阿里","京东","搜狐","网易"}; 
 			String[ ] sBak = new String[6];
 			System.arraycopy(s,0,sBak,0,s.length);
			 for (int i = 0; i < sBak.length; i++) {
			System.out.print(sBak[i]+ "\t");
		}
	}
}

⭐ java.util.Arrays 类

Arrays 类包含了:排序、查找、填充、打印内容等常见的数组操作。

【eg】使用 Arrays 类输出数组中的元素

import java.util.Arrays;
	public class Test {
		public static void main(String args[ ]) {
		int[ ] a = { 1, 2 };
	System.out.println(a); // 打印数组引用的值;
	System.out.println(Arrays.toString(a)); // 打印数组元素的值;
	}
}

执行结果如下所示:
在这里插入图片描述

注意:

此处的 Arrays.toString()方法是 Arrays 类的静态方法,不是前面讲的 Object 的 toString()方法。

【eg】使用 Arrays 类对数组元素进行排序一

import java.util.Arrays;
	public class Test {
	public static void main(String args[ ]) {
		int[ ] a = {1,2,323,23,543,12,59};
		System.out.println(Arrays.toString(a));
		Arrays.sort(a);
	System.out.println(Arrays.toString(a));
	}
}

执行结果如下所示:
在这里插入图片描述

【eg】使用 Arrays 类实现二分法查找法

import java.util.Arrays;
		public class Test {
		public static void main(String[ ] args) {
		int[ ] a = {1,2,323,23,543,12,59};
	System.out.println(Arrays.toString(a));
	Arrays.sort(a); //使用二分法查找,必须先对数组进行排序;
	System.out.println(Arrays.toString(a));
 	//返回排序后新的索引位置,若未找到返回负数。
	System.out.println("该元素的索引:"+Arrays.binarySearch(a, 12)); 
	}
}

【eg】使用 Arrays 类对数组进行填充

import java.util.Arrays;
		public class Test {
		public static void main(String[ ] args) {
			int[ ] a= {1,2,323,23,543,12,59};
		System.out.println(Arrays.toString(a));
		Arrays.fill(a, 2, 4, 100); //将2到4索引的元素替换为100;
		System.out.println(Arrays.toString(a));
	}
}

执行结果如下所示:

在这里插入图片描述
我们下节继续分享!

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

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

相关文章

Python+Selenium 网页自动化 exe 程序编程实现(最全避坑指南)

前言 在我的日常工作中&#xff0c;经常需要在内网&#xff08;不连接互联网&#xff09;的网页版办公系统中进行抓取网页数据、修改表单等大量重复性的操作。我就想是否可以编写出自动化的工具&#xff0c;将这些日常琐碎的操作变得轻松而高效。虽然本人非计算机相关专业&…

OpenGL 纹理

1.简介 纹理是一个2D图片&#xff08;甚至也有1D和3D的纹理&#xff09;&#xff0c;它可以用来添加物体的细节&#xff1b;你可以想象纹理是一张绘有砖块的纸&#xff0c;无缝折叠贴合到你的3D的房子上&#xff0c;这样你的房子看起来就像有砖墙外表了。 为了能够把纹理映射(M…

Day973.授权码许可类型中,为什么一定要有授权码? -OAuth 2.0

授权码许可类型中&#xff0c;为什么一定要有授权码&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习的是auth2中为什么一定要有授权码的内容。 OAuth 2.0 的授权码许可类型&#xff0c;在小兔打单软件的例子里面&#xff0c;小兔最终是通过访问令牌请求到小明的店铺…

使用raspberry pi pico 制作红绿灯

需要的东西&#xff1a;一块面包版、一块raspberry pi pico、红绿黄led灯各一颗、220欧电阻3只、若干线 编程软件&#xff1a;thonny 操作系统&#xff1a;deepin 23 结果展示&#xff1a; 使用raspberry pi pico 制作红绿灯 from machine import Pin import utime yellowled…

4种整流电路和5种滤波电路

4种整流电路和5种滤波电路 基本电路&#xff1a;一般直流稳压电源都使用220伏市电作为电源&#xff0c;经过变压、整流、滤波后输送给稳压电路进行稳压&#xff0c;最终成为稳定的直流电源。这个过程中的变压、整流、滤波等电路可以看作直流稳压电源的基础电路&#xff0c;没有…

前端人必须知道的三种移动跨平台方案

跨平台技术是前端人必备技能&#xff0c;今天就来为大家解读一下近几年业界主流的三大移动端跨平台方案&#xff1a; Web 天然跨平台&#xff1a; Web App、PWA&#xff08;Progressive Web Apps&#xff09;、Hybrid App、PHA&#xff08;Progress Hybrid App&#xff09;都可…

Springboot自定义starter

文章目录 前言1.引入依赖1.1 json的转换1.2 xml转换依赖 2.定义Formate核心转化接口3.实现核心接口json和xml的转换3.1 json转换的实现3.2 xml转换的实现 4. FormatProperties类5.FormatAutoConfiguration 类配置6.提供一个MyFormatTemplate 模板类7.注册到springboot8.创建spr…

cavity开盖制作的辅助层别

cavity开盖工艺制作的辅助层别 数量&#xff1a;6个

suricata的flow流会话管理分析1

在《suricata中的线程管理分析》一文中&#xff0c;我们看到suricata中有FlowWorker和FlowManager两个线程来处理流表&#xff0c;说明流表的实现应该不简单&#xff0c;果然&#xff0c;看了流相关的这块代码后&#xff0c;发现确实有点复杂&#xff0c;代码估计得慢慢坑&…

[SpringMVC]Controller控制器、Interceptor拦截器、RestFul风格、异常处理、JSON数据格式与AJAX请求

文章目录 MVC理论基础配置环境并搭建项目Controller控制器配置视图解析器和控制器RequestMapping详解RequestParam和RequestHeader详解CookieValue和SessionAttrbutie重定向和请求转发Bean的Web作用域 RestFul风格Interceptor拦截器创建拦截器多级拦截器 异常处理JSON数据格式与…

C# Socket入门编程winform案例(附下载链接)

C# socket编程实现信息的接收&#xff08;winform&#xff09; 点我下载项目资源 服务器端&#xff1a; 第一步&#xff1a;建立一个用于通信的Socket对象 第二步&#xff1a;使用bind绑定IP地址和端口号 第三步&#xff1a;使用listen监听客户端 第四步&#xff1a;使用accep…

宝安西乡产业园变九年制学校,新增宅地、商地。

6月5日&#xff0c;宝安区城市更新和土地整备局发布《西乡街道盐田社区银田地块土地整备利益统筹项目土地整备规划&#xff08;草案&#xff09;》&#xff08;以下简称草案&#xff09;。 草案显示&#xff0c;该项目经过调整后&#xff1a; ● 新增一块二类居住用地&#xf…

王者荣耀战区活跃度排名怎么实现的?这篇文章给你答案!

&#x1f349;博客主页:阿博历练记 &#x1f4d6;文章专栏:数据结构与算法 &#x1f68d;代码仓库:阿博编程日记 &#x1f365;欢迎关注:欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f308;前言&#x1f36a;堆的实现&#x1f50d;1.堆的结构框架&#x1f50d;2.堆…

通过ChatGPT打造10W+公众号文章

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt。 这是一篇非常具有实操性的指南&#xff0c;可能会动到一些某些行业人的蛋糕&#xff0c;但我无益于此。我是…

pnpm的安装和使用

1 安装 1.1 安装教程 npm全局安装pnpm npm install -g pnpm设置镜像地址 获取当前配置的镜像地址 pnpm get registry设置新的镜像地址 pnpm set registry https://registry.npm.taobao.org设置包存放地址 pnpm config set store-dir E:/xxx1.2 安装问题 当在vscode上使用…

在labview里使用LabSQL连接ACCESS数据库

使用LabSQL连接ACCESS数据库 写在前面ODBC数据源管理器的配置LV软件里使用结束 写在前面 ACCESS数据库一般包含在Office组件里&#xff0c;安装完Office后就可以直接拿来使用&#xff0c;要求不高的场合适合使用。 LabSQL工具包直接放进LV的安装目录下&#xff0c;打开软件后在…

SpringBootWeb案例-1(下: 来源黑马程序员)

3. 员工管理 完成了部门管理的功能开发之后&#xff0c;我们进入到下一环节员工管理功能的开发。 基于以上原型&#xff0c;我们可以把员工管理功能分为&#xff1a; 分页查询带条件的分页查询删除员工新增员工修改员工 3.1 分页查询 3.1.1 基础分页 3.1.1.1 需求分析 我…

YOLOV8 Onnxruntime Opencv DNN C++部署

1.Opencv介绍 OpenCV由各种不同组件组成。OpenCV源代码主要由OpenCV core(核心库)、opencv_contrib和opencv_extra等子仓库组成。近些年,OpenCV的主仓库增加了深度学习相关的子仓库:OpenVINO(即DLDT, Deep Learning Deployment Toolkit)、open_model_zoo,以及标注工具CV…

C++标准模板库 队列容器的使用

队列&#xff1a;在数据结构中也成为操作受限的线性表&#xff0c;是一种只允许在表的一端插入&#xff0c;在另一端删除的线性表 特点&#xff1a;先进先出&#xff0c;像打饭《排在最前面的先买&#xff0c;后到的排在队尾&#xff0c;即删除在队头&#xff0c;插入在队尾》…

面试测试工程师,都要考察什么?

今年刚接触了&#xff08;功能&#xff09;测试工程师的面试工作&#xff0c;有遇到对信贷业务流程较熟悉的、工作内容纯测试app功能的、什么都接触过但是不够深入的&#xff0c;发现简历上写的东西和实际真的有点差距&#xff0c;面试也是一个艺术活。 如果你想学习自动化测试…