1.定义:数组是一种容器,可以存放多个数据值
2.特点:
1.数组是一种引用类型。
2.数组当中的多个数据,类型必须统一。
3.数组的长度在程序运行的期间不允许改变。
4.包括对象也可以形成存放在数组。
3.数组的初始化:在内存中创建一个数组,并且向其中赋予一些默认值。
几种常见的初始化方式:
1.动态初始化:指定长度。
格式:数据类型[ ] 数组名称 = new 数据类型[数组长度];
如:int[ ] arrayInt =new int[10];
2.静态初始化:指定内容。
格式:数据类型[ ] 数组名称 = new 数据类型[ ] {元素1,元素2,... };
如:int[ ] arrayIntsta =new int[ ] {0,1,2,3,4,5};
3.静态数组省略格式:
格式:数据类型[ ] 数组名称 = {元素1,元素2,... };
TIP:
1.静态初始化没有指定长度,但是仍然会自动推算长度。
2.静态初始化标准格式可以拆分为两个步骤:
int[ ] array;
array = new int[ ] {11,21,31};
3.动态初始化也可以拆分成两个步骤。
int[ ] array;
array = new int[ 10 ];
4.静态初始化的省略步骤则不能拆分。
5.建议: 如果不确定数组的具体内容,使用动态数组(指定长度),
如果是已经确定的内容,使用静态数组(指定内容)
4.访问数组元素:
4.1:直接打印数组名称,得到的是数组对应的 内存地址哈希值。
4.2:访问数组元素的格式:数组名称[索引值](注意:索引值从0开始,一直到数组的长度-1)
4.3:动态数组默认值:
1.如果是整型数组,默认值是:0
2.如果是浮点型数组,默认值是:0.0
3.如果是字符类型,默认值是:‘\u0000’(不可见)
4. 如果是布尔类型,默认值是:false
5.如果是引用类型,默认值是:null
4.4:静态数组也有默认值,只不过马上替换成为我们输入的数组元素值。
静态数组代码示例:
public static void main(String[] args) {
//创建一个静态int数组
int[] arrayIntsta =new int[]{0,1,2,3,4,5};
//创建一个静态char数组
char[] arrayCharsta =new char[]{'A','B','C','d','e'};
//创建一个静态String数组
String[] arrayStringsta =new String[]{"我是","中国人","我爱","中国"};
//创建一个省略格式的静态int数组
int[] arrayIntSimsta = {10,20,30,40,50};
//打印数组名称
System.out.println(arrayIntsta);
//逐行打印各个数组元素
System.out.println(arrayIntsta[0]+" "+arrayIntsta[1]+" "+arrayIntsta[2]+" "+arrayIntsta[3]+" "+arrayIntsta[4]);
System.out.println(arrayCharsta[0]+" "+arrayCharsta[1]+" "+arrayCharsta[2]+" "+arrayCharsta[3]+" "+arrayCharsta[4]);
System.out.println(arrayStringsta[0]+arrayStringsta[1]+" "+arrayStringsta[2]+arrayStringsta[3]);
System.out.println(arrayIntSimsta[0]+" "+arrayIntSimsta[1]+" "+arrayIntSimsta[2]+" "+arrayIntSimsta[3]+" "+arrayIntSimsta[4]);
//也可以将数组当中的某个元素赋值交给变量。
String name = arrayStringsta[0]+arrayStringsta[1];
System.out.println(name);
}
动态数组代码示例:
TIP:
1.如果访问数组元素的索引编号不存在,那么将会发生越界访问异常。
2.数组必须进行初始化才能使用其中的元素,如果只是赋值了一个null,没有进行new创建,那么将会发生空指针异常
5.数组长度获取:
1.格式: 数组名称.length (得到一个int 数字,代表数组长度)
代码示例:
public class DemoArrayLength {
public static void main(String[] args) {
int[ ] arrayLength = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int length = arrayLength.length;
System.out.println("数组的长度: "+length);
}
}
TIP:
1.数组一旦创建,程序运行期间,长度不可改变。
如下图所示:
6.遍历数组:
1.用循环遍历数组:
2.格式: for(变量初始值;判断条件;步进表达式)
代码示例:
public class DemoForArray {
public static void main(String[] args) {
int[ ] arrayFor =new int[]{1, 2, 3, 4, 5};
for (int i =0; i < arrayFor.length; i++) {
System.out.println("数组的第" + (i+1) +"个元素是: " + arrayFor[i]);
}
}
}
7.遍历数组取最值:
代码示例:
public class DemoArrayMax {
public static void main(String[] args) {
int[ ] arrayMax =new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 45, 35, 25, 15, 5}; //定义数组
int[ ] arrayMaxNumber=new int[arrayMax.length]; //存放最大值位置
int max = arrayMax[0]; //定义最大值变量
int num =0; //定义最大值位置初始为0
for (int i =1; i < arrayMax.length; i++) {//遍历寻找最大值
if (max <= arrayMax[i]) {
max = arrayMax[i];
arrayMaxNumber[i] = i;
}
}
while (arrayMaxNumber !=null) {//遍历输出最大值以及所在的位置
if (num > arrayMax.length-1) {
break;
}else {
if (max == arrayMax[num]) {
System.out.println("数组的最大值是: " + max);
System.out.println("位于数组的第" + (num +1) +"号元素");
}
num++; //放到if外防止num++没有生效
}
}
}
}
8.数组反转:
1.不使用新数组
2.思路:
1.其实是对称元素的交换。
2.表示对称元素需要两个索引,一个min,一个max。
3.交换索引需要用第三个变量。
4.设置什么时候应该交换。否则就停止交换。(min<max)
代码示例:
public class DemoArrayFanxu {
public static void main(String[] args) {
int[ ] arrayFanxu =new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 45, 35, 25, 15, 5,-1,-20,-50}; //定义数组
System.out.println("输出原本的数组:");
for(int i =0;i
if(i==(arrayFanxu.length/2)){
System.out.print(" "+arrayFanxu[i]);
System.out.println();
}
else{
System.out.print(" "+arrayFanxu[i]);
}
}
System.out.println();
//反序开始
for(int min =0,max = arrayFanxu.length-1;min
int temp = arrayFanxu[min];
arrayFanxu[min] = arrayFanxu[max];
arrayFanxu[max] =temp;
}
//验证结果
System.out.println("输出反序后的数组:");
for(int i =0;i
if(i==(arrayFanxu.length/2)){
System.out.print(" "+arrayFanxu[i]);
System.out.println();
}
else{
System.out.print(" "+arrayFanxu[i]);
}
}
}
}
9.将数组作为方法参数:
1.以上面反序代码为例:
代码示例:
public class DemoArrayFanxu {
public static void main(String[] args) {
int[ ] arrayFanxu=new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 45, 35, 25, 15, 5, -1, -20, -50};//定义数组
System.out.println("输出原本的数组:");
printArray(arrayFanxu);
System.out.println();
//反序开始
for (int min =0, max = arrayFanxu.length -1; min < max; min++, max--) {
int temp = arrayFanxu[min];
arrayFanxu[min] = arrayFanxu[max];
arrayFanxu[max] = temp;
}
//验证结果
System.out.println("输出反序后的数组:");
printArray(arrayFanxu);
}
/*
1.三要素:返回类型,方法名,方法参数
2.只是打印结果,所以返回类型为空
*/
public static void printArray(int[] array){
for(int i =0;i
if(i==(array.length/2)){
System.out.print(" "+array[i]);
System.out.println();
}
else{
System.out.print(" "+array[i]);
}
}
}
}
TIP:
1.数组可以作为方法的参数,调用方法的时候,向方法的小括号进行传参,传递进去的是数组的地址值。
10.数组方法调用拓展:
1.一个方法可以有多个参数,但只能返回0或1个返回值,不能有多个返回值。
2.可以用数组存放多个想要返回的值,然后返回这个数组即可。
3.任何数据类型都可以作为方法的参数类型,或者返回值类型。
4. 数组可以作为方法的参数,传递进去的是数组的地址值。
5. 数组作为方法的返回值,返回的其实也是数组的地址值。
代码示例:
public class DemoArrayGet {
public static void main(String[] args) {
int[] result =calculate(10,20,30,40); //接收数组
System.out.println("计算的总和为:"+result[0]);
System.out.println("计算的平均值为:"+result[1]);
System.out.println("得到方法传值后的数组地址:"+result); //打印result数组地址,验证结果
}
private static int[]calculate(int i, int i1, int i2, int i3) {
int sum = i+i1+i2+i3;
int avg = sum/3;
int[] array = {sum,avg}; //存放结果的数组
System.out.println("方法内的数组地址:"+array); //打印array数组地址
return array;
}
}