数组-数据结构(求和、反转、打印)
数组的定义:什么是数组
一组数据
数组是相同数据类型的有序集合
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
其中,每一个数据称作一个数组元素,每个数组元素,都可以通过一个下标来访问它们
声明方式:
声明数组变量:
int [] arr;//首选创建数组方式
int arr[];
用new操作符创建变量
int []arr=new int[12];
数组的元素是通过索引访问的,数组索引从0开始
获取数组长度方法:arr.length
public class HelloWorld { public static void main(String []args) { int []arr=new int[13];//定义长度为13的数组,可以存放13个数字 arr[0]=15;//把下标为0的值设置为15 arr[1]=28;//把下标为1的值设置为28 System.out.println(arr[0]);//打印下标为0的值 System.out.println(arr.length);//打印数组长度 } }
求数组的和:
public class HelloWorld { public static void main(String []args) { int []arr=new int[13];//定义长度为13的数组 arr[0]=1; arr[1]=2; arr[2]=3; arr[3]=4; arr[4]=5; arr[5]=6; int sum=0; for(int i=0;i<arr.length;i++){ sum=sum+arr[i];//求数组的和 } System.out.println(sum); } }
内存分析:
数组的三种初始化方式:
静态初始化: int []arr={1,2,3,4,4}; Man[]arr={new Man(1,1),new Man(2.2)}
int []arr=new int [4]; arr[0]=12; arr[1]=14;
数组的默认初始化:
数组是引用类型,它的元素相当于类的实例化变量 ,所以数组一经分配空间,其中的元素也会被按照实例变量的同样方式隐式初始化
注:所以当数组一但new了,然后分配了空间,不管有没有值他都会默认的进行初始化,未赋值的下标当去使用时输出的内容为0;
数组的四大特点:
长度确定,创建后不可更改
类型必须相同
数据类型不限,可引用类型也可基本类型
数组变量本身是引用类型,所以可以把数组当做对象,其中的元素可以当做为成员变量,可以根据下标进行使用
数组本身是对象:其中java中对象是在堆中的,所以数组不论声明保存任何类型,数组对象本身是在堆中
数组边界:
下标的合法区间:【0,length-1】,如果越界会报错
错误:ArrayIndexOutOfBoundsException
数组的使用:
public class HelloWorld { //遍历数据内的全部元素 public static void main(String []args) { int []arr={1,2,3,4,5,6}; for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } }
public class HelloWorld { //遍历数组计算元素中的和 public static void main(String []args) { int []arr={1,2,3,4,5,6}; int a=0; for(int i=0;i<arr.length;i++){ a=a+arr[i];//求和 } System.out.println(a); } }
public class HelloWorld { //遍历数组计算元素中最大的值 public static void main(String []args) { int []arr={1,2,3,4,5,6,11,22,11,55,0}; int Max=arr[0];//把这个定义为数组的第一个数 for(int i=0;i<arr.length;i++){ if(arr[i]>Max){ Max=arr[i];// } } System.out.println(Max); } }
public class HelloWorld { //使用增强for循环,遍历数组,注:增强for没有下标,不合适操作元素 public static void main(String []args) { int []arr={1,3,4,5,6,1,0,11,22}; for(int a:arr){//增强for循环 System.out.println(a); } } }
public class HelloWorld { //使用增强for循环遍历数组,然后求出最大值 public static void main(String []args) { int []arr={1,3,4,5,6,1,0,11,22}; int Max=arr[0]; for(int a:arr){//增强for循环 if(a>Max){ Max=a; } } System.out.println(Max); } }
public class HelloWorld { public static void main(String []args) { //数组反转 int []a={1,2,3,4,5,6,7,8,9}; int []d=read(a); toin(d); } //反转数组 public static int[] read(int []rdag){ int []regh=new int [rdag.length];//创建一个变量让他的长度不能大于传入的参数 for(int i=0,j=regh.length-1;i<rdag.length;i++,j--){ //相当于 System.out.println("i:"+rdag[i]); System.out.println("j:"+regh[j]); regh[i]=rdag[j];//把第j个元素传给i,一一对应的传,因为 } return regh; } //打印数组 public static void toin(int []arr){ for(int i:arr){ System.out.println(i); } } }
Arrays类:
方法:
给数组赋值:fill(int a,int vla),把数组的值,改为对应的值,fill(int[] a, int fromIndex, int toIndex, int val):把指定的数组中,指定元素,替换成某一个内容
如:
public class HelloWorld { public static void main(String []args) { int []arr={1,2,3,4,5,222,555,6,55}; Arrays.fill(arr,2,222,8);//如把arr数组中的2跟222的元素中间的内容替换成8,输出,1,2,8,8,8,222,555,6,55 } } }
对数组排序:scrt()
比较数组:equals()
查找元素:binarySearch()
//自定义一个工具类,打印数组
public class HelloWorld { public static void main(String []args) { int []arr={1,2,3,4,5,222,555,6,55}; //注:在正常编写程序的时候这个,方法名不能写为,toString,因为这个方法名已被使用 toString(arr);//调用方法,打印数组 }
//自定义一个工具类,打印数组 public static void toString(int[] a){ for(int i=0;i<a.length;i++){ //根据判断在前后添加[]号 if(i==0){//如果第一个i=0,那就在最开始打印一个[ System.out.print("["); }if(i==a.length-1){//如果i等于a的长度减一,那就打印] System.out.print("]"); }else{ System.out.print(a[i]+","); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?