java一/二维数组的静态/动态初始化及可用方法

1:一维数组

1.1:一维数组的初始化

初始化方式分为两种,静态初始化和动态初始化,静态初始化在初始化时就给数组赋了值,而动态初始化时先定义长度,再遍历赋值

在只明确数据个数的时候用动态,手动指定元素的时候用静态

定义格式:

静态初始化:
数据类型 []数组名=new 数据类型[]{1,2,3~};
简化:数据类型 []数组名={1,2,3~};

动态初始化:
数据类型 []数组名=new 数据类型[数组长度];

1.2:如何创建无上限或自定义长度的数组

java的数组无论用哪种方法初始化,一旦初始化长度,就不能改变了,如果想要创建无上限或者自定义长度的容器来存储数据,要么是改用list集合,要么是在循环中创建新数组,数组的长度可以用length方法获取,格式为arr.length,然后把arr.length+1作为新数组的长度,达到数组长度跟随输入数据数量改变的效果

Scanner scan = new Scanner(System.in);
int []arr1=new int[0],arr2;
int j=1;
//定义0长度的arr1,和不初始化的arr2        
j用来判断是否要继续接收数据
while(j==1){
arr2=new int[arr1.length+1];
for(int i=0;i<arr1.length;i++){
    arr2[i]=arr1[i];          }
//初始化arr2使其长度为arr1的长度+1
arr2[arr1.length]=scan.nextInt();
arr1=arr2;
//将新输入的值赋给arr2,后传给arr1
//循环结束,下一次循环会重新初始化arr2
}  

1.3:数组的常用方法

equals()方法:判断两个数组是否相同,方法比较的是数据,而有着接近效果的==比较的是地址值,两个不同的数组地址值是不一样的所以不能用

System.out.println(arr1.equals(arr2));
方法返回boolean值,也可以通过Arrays调用该方法
System.out.println(Arrays.equals(arr1,arr2));

sort()方法:按照从小到大的顺序对数组进行排序,括号内可以对排序范围进行指定,但切记“包头不包尾”

//作用一
int[] arr1={1,9,3,7};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));//[1, 3, 7, 9]
//作用二
int[] arr2={1,9,3,7,2,5};
Arrays.sort(arr2,1,4);//范围包含1不包4
System.out.println(Arrays.toString(arr2));//[1, 3, 9, 7, 2, 5]

length方法(无括号):返回数组的长度,arr.length就可获取长度

toString方法:返回对象的字符串表现形式,通过Arrays调用

String arrStr=Arrays.toString(arr);

binarySearch()方法:通过二分法查找数组中指定内容,二分法的特点是查询的数据必须有序,从小到大排列,所以可以搭配前面的sort方法使用,通过Arrays调用

int[] arr = {3,5,6,1,2,4};
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr,3));    结果为6
System.out.println(Arrays.binarySearch(arr,1,5,4));指定1-5为查找范围

copyOf()方法:复制指定的数组,可指定结束位置不可指定起始位置,用来取代挨个遍历给新数组赋值的复制方法,通过Arrays调用

int arr1={~};
int arr2=Arrays.copyOf(arr1)   全部复制
int arr2=Arrays.copyOf(arr1,3) 复制arr1到索引3结束

copyOfRange()方法:复制数组的指定范围,前面一个只能选择结束位置,这个可选开始和结束位置,注意“包头不包尾”

int [] arr = {1,2,3,4};
int [] arr2=Arrays.copyOfRange(arr,1,3);    范围包含1不含3

2:二维数组

二维数组原理与一维数组类似,倒不如说就是多个一维数组的组合,也包括静态初始化和动态初始化方式

2.1:二维数组的初始化
静态初始化:
数据类型[][] 数组名=new 数据类型[][] { {1,2} ,{3,4} };
简写:
数据类型[][] 数组名={ {1,2},{3,4} };

动态初始化:
数据类型[][]数组名=new 数据类型[行][列];
行表示有多少个一维数组,列表示每个一维数组能存多少元素

二维数组的遍历使用两层for循环,外循环遍历获取每一个一维数组,内循环遍历一维数组获取每一个元素,图中for循环里的arr.length和arr[i].length的不同,解释了二维数组本质是一维数组的组合

int [][]arr=new int[m][n];
省去赋值步骤,这里行为m,列为n
for(int i=0;i<arr.length;i++){
   for(int j=0;j<arr[i].length;j++){
       System.out.println("循环遍历到每一个元素")
   }
}
2.2:创建列数不等的二位数

假如我想让二维数组的一维数组长度不同,也就是每一行的列值不同,该怎么做?

例:我要创建一个2行的二维数组,第一行存2个数,第二行存3个数

方法是额外创建两个一位数组,赋值给二维数组的行

int [][]arr=new int[2][]; 定义已知行数的二维数组
int []arr1={1,2};
int []arr2={3,4,5}; 定义一位数组存储数据
arr[0]=arr1;
arr[1]=arr2;  直接将存有数据的一维数组赋值给二维数组的行

菜鸟学习笔记:D

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值