数组基础知识汇总

这篇博客详细介绍了Java中数组的基础知识,包括数组的声明、创建、结构以及相关操作,如复制数组、搜索数组(顺序查找和二分查找)、冒泡排序和Array类的sort方法。特别强调了数组下标从0开始,`System.arraycopy()`的使用方法,以及`Arrays.equals()`用于比较数组内容的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

注意点

数组的第一个元素下标以数字0开始,如果创造了具有10个元素的数组score,那么下标范围是0~9,没有10,如果访问元素 score【10】的话,会终止程序

一维数组

数组的声明

为了将数组生命和简单变量区别开,一般将一堆方括号“[]”加到对象或者数据类型,或者变量的后面。

声明一个一维数组,一般有两种格式:

类型标识符[] 数组名

类型标识符 数组名[]

例如

int [] a;

int a[];//声明一维数组a,数组类型为整型
数组的创建

其实是为数组分配好内存,Java中采用new操作符来创建

格式: 数组名 = new 类型标识符 【整型表达式】;

其中,数组名是已经声明的数组变量名;类型标识符是数组元素的类型;整型表达式只能含有整型常量或变量,表示该数组的大小,即数组长度,也是数组元素的个数

也可以在声明数组的同时用new为其分配内存空间

格式:类型标识符 数组名【】=new 类型标识符【整型表达式】


public class 创建数组及初始化 {
public static void main(String args[])
{
	float [] score;//声明数组变量
	score =new float[100];//为数组score分配100个浮点型数据空间
	int a[]=new [10];//为数组a分配10个整型数据空间,声明a同时为a分配内存空间
	int number = 5;
	char[] charArray=new char[number];//为charArray分配了5个字符型数据空间
}
}

在声明及创建一个数组的同时可以对其进行初始化,格式:

类型标识符 数组名【】={常量表达式1,常量表达式2,…}:

类型标识符【】 数组名={常量表达式1,常量表达式2,…};

例如:

int num[]={2,4,6,8};

char[] chr={'a','b'};
数组结构

arrayName[index] index为数组下标,arrayName为数组名称

length属性获取字符串的长度

public class 数组长度及越界 {
public static void main(String args[])
{
	int i;
	int a[] =new int [5];//声明并创建整型数组 a
	//a[5]=300;//如果有这一行代码则会出现数组下标越界异常
	for(i=0;i<5;i++)
		a[i]=i;//为数组元素赋值
		for(i=a.length-1;i>=0;i--)//通过length属性获取数组长度
			System.out.println("a["+i+"]="+a[i]);//你需打印数组元素
}
}
//初始化二维整型数组吧,数组的第一维长度为3,第二维长度为3,2,4
int b[][]={{1,2,3},{4,5},{6,7,8,9}};

public class 访问多维数组 {
public static void main( String[] args)
{
	int [][] arr= {{1,2,3},{4,5,6}};//表示两行三列,前面的int可以为int【2】【3】
	int []foo=arr[0];
    //双重循环输出二维数组中的各个元素,行优先输出元素
	for(int i=0;i<arr.length;i++)//arr.length为2,,即二维数组中只有两个元素
	{
		for(int j=0;j<arr[i].length;j++)//arr[i].length为3,即该一维数组中有三个整型数据
		{
			System.out.print(arr[i][j]+" ");
		}
		System.out.println();//换行的作用
	}
	for(int i=0;i<foo.length;i++)//foo师叔祖arr第一个元素,是一维数组,长度为3
	{
		System.out.print(foo[i]+" ");
	}
}
}

数组arr【i】【j】表示的是第i+1行和第j+1列的值,注意length所代表的长度,数组名后直接加上length(如arr.length)表示的是数组的行数;

指定索引后加上length(如arr[0].length)表示的是该行所含有的元素,即列数

数组的的相关用法

复制数组
使用系统方法arraycopy

public class 复制数组 {
public static void main(String []args)
{
	//定义字符数组copyF
	char [] copyF= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n'};
	char [] copyT=new char[7];//声明并创建数组copyT
	System.arraycopy(copyF,2,copyT,0,7);//利用系统方法arraycopy,讲copyF数组的第三个元素到第七个元素赋值到copyT数组
	System.out.print("The dest array is:");
	for(int i=0;i<copyT.length;i++)
	{//打印复制后的数组至屏幕
		System.out.print(copyT[i]+" ");
	}
}
}

System.arraycopy(copyF,2,copyT,0,7); 这一语句中,

可以理解为(被复制数组名,从被复制数组哪里开始复制,复制到的数组名,a,b)

a,b为左闭右开区间,即表示复制到新的数组中的长度,这个长度也要根据给新数组的声明而定,a表示从何处开始复制更替,b表示复制的元素的个数,切记部可将ab联系起来,认为复制的元素的长度为其差,b的值和a没有关系,若新数组为未声明数组,即只能从0开始,但是若为声明了的数组且在范围内,即可以大于等于0,如果超过声明时给定的分配空间就会出错,例如上面开始声明copyT是分配的7,所以就最多复制到这个数组的元素不能超过7个!

使用该方法时,目标数组必须调用arraycopy之前分配的内存,而且这个内存空间必须足够大以容纳被复制的数据

public class 复制数组 {
public static void main(String []args)
{
	//定义字符数组
	char [] copyF= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n'};
	//char [] copyT=new char[10];
	char [] copyT= {'f','g','h','i','j','k','l','m','n','d','e','f','g','h','i'};
	System.arraycopy(copyF,2,copyT,2,9);
	System.out.print("The dest array is:");
	for(int i=0;i<copyT.length;i++)
	{
		System.out.print(copyT[i]+" ");
	}
}
}

对应复制数组

此代码证明以上黄色部分

搜索数组

1顺序查找

从开都的每一个元素一次查找符合条件的数据


public class 顺序查找 {
public static void main(String args [])
{
	String list[][]= {{"pen","钢笔"},{"pencil","铅笔"},{"ruler","尺子"}};
	String strE="pencil";
	String strC="";//开始定义并未赋值
	int flag=0;
	for(int i=0;i<list.length;i++)
	{
		if(list[i][0].compareTo(strE)==0)//如果满足条件就执行以下代码
		{
			strC=list[i][1];//将中文字义赋值给strC
			System.out.println("查到的中文字义为:"+strC);
		    flag=1;
		    break;
		}
	}
	if(flag==0)
	{
		System.out.println("未找到匹配的中文字义!");
	}
}
}

对于System.out.println()语句,如果直接要输出一个数组的内容,可以直接在括号内输入数组名,例如上面的若是不加上前面的汉字部分,(因为加号起连接作用),则直接输入数组名,也不可带上加号!

2二分查找

前提:数据必须是按着某种顺序有序的数据,即从小到大或者从大到小

冒泡排序法

内层是 长度-i-1

Array类的sort方法

Arrays.sort(数组名)

基本的排序方法

public static void sort(Xxx a[])

还有一种形式是只针对其中的一部分进行排序:

public static void sort(Xxx a[],a,b)

其中的a,b是一个左闭右开的区间,只对这个区间进行排序,a数组的类型可以是char bute short int long float double boolean

import java.util.*;
public class SORT方法排序 {
public static void main(String args[])
{
	int a[]= {9,8,3,5,1,6,7,0,65,9,4,6};
	System.out.println("数组排序前的顺序:");
	for(int i=0;i<a.length;i++)
	{
		System.out.print(a[i]+" ");
	}
	System.out.println("");
	System.out.println("数组排序后的顺序:");
	Arrays.sort(a);
	for(int i=0;i<a.length;i++)
	{
		System.out.print(a[i]+" ");
	}
}
}

数组排序

数组的比较

格式:

Arrays.equals(数组名1,数组名2)

import java.util.*;
public class 用法equals {
public static void main(String args [])
{
	int [] a1= {1,2,3,4};
	int [] a2= {1,2,3,4};
	System.out.println(Arrays.equals(a1,a2));//第一次将a1,a2进行比较
	a2[2]=6;//对a2数组进行更改
	System.out.println(Arrays.equals(a1,a2));//第二次将两数组进行比较,结果是:假
}
}

基于开源大模型的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。 智能教学辅助系统 这是一个智能教学辅助系统的前端项目,基于 Vue3+TypeScript 开发,使用 Ant Design Vue 作为 UI 组件库。 功能模块 用户模块 登录/注册功能,支持学生和教师角色 毛玻璃效果的登录界面 教师模块 备课与设计:根据课程大纲自动设计教学内容 考核内容生成:自动生成多样化考核题目及参考答案 学情数据分析:自动化检测学生答案,提供数据分析 学生模块 在线学习助手:结合教学内容解答问题 实时练习评测助手:生成随练题目并纠错 管理模块 用户管理:管理员/教师/学生等用户基本管理 课件资源管理:按学科列表管理教师备课资源 大屏概览:使用统计、效率指数、学习效果等 技术栈 Vue3 TypeScript Pinia 状态管理 Ant Design Vue 组件库 Axios 请求库 ByteMD 编辑器 ECharts 图表库 Monaco 编辑器 双主题支持(专业科技风/暗黑风) 开发指南 # 安装依赖 npm install # 启动开发服务器 npm run dev # 构建生产版本 npm run build 简介 本项目旨在开发一个基于开源大模型的教学实训智能体软件,帮助教师生成课前备课设计、课后检测问答,提升效率与效果,提供学生全时在线练习与指导,实现教学相长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值