欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA中的数组

程序员文章站 2022-07-16 08:17:37
...

数组

概念:内存中一段连续的空间,可以保存多个相同类型的数据

一、使用方法

1、数组的声明

语法:数据类型[] 数组名;

int[] a;//推荐使用的声明方式
int []a;
int a[];

2、为数组手动分配空间

语法: 数组名 = new 数据类型[ 长度 ];
长度:是一个整数,用来约束数组的空间大小(容量)

int[] a;
a = new int[10];//为a数组分配10块内存空间,每块空间中可以存储一个数据
int[] b = new int[5];//声明同时分配空间

数组的每块空间中可以保存一个数据,我们将保存在数组中的数据称之为数组的元素
我们向数组中添加数据或移除数据称之为访问数组的元素

3、数组的下标

数组为每块空间分配的编号,从0开始到数组长度-1结束,自动生成。

长度为4的数组:

public static void method1(){
    int[] a = new int[4];
    a[0] = 10;
    a[1] = 20;
}

使用下标访问数组中的元素:
JAVA中的数组

4、数组的长度

语法:数组名.length
得到一个int类型的数据,代表该数组的长度

int[] a = new int[10];
System.out.println( a.length );//10

5、其他声明/初始化方式

//1、声明数组并分配空间、
  //语法:数据类型[] 数组名 = new 数据类型[长度];
  int[] a = new int[10];

//2、显式初始化
  //语法:数据类型[] 数组名;
  //     数组名 = new 数据类型[]{值1, 值2,值3.....};
  //根据值的数量分配等量的空间
  int[] a;
  a = new int[]{10,55,40,90};

//3、显式初始化【简写】
  int[] a = {10,55,60,90};

二、数组特性

1、默认值

数组在分配空间时,会根据数据类型为每个空间赋予默认值
例:
JAVA中的数组

0就是int类型数组元素的默认值

其他数据类型默认值:

类型 默认值
整数类型 0
小数类型 0.0
布尔类型 false
字符类型 ‘\u0000’
引用类型 null(空)

2、数组的引用

概念:数组名就是数组的引用,该引用指向了数组内存空间的首地址。
数组通过 首地址 + 下标 * 数据类型所占字节数 能够计算出该元素在内存中的位置,进而从内存中可以获取该元素。

基本数据类型:直接传递数据,有一方改变不影响另一方
引用数据类型:传递地址,有一方改变影响另一方

三、数组的使用

1、数组作为函数的参数

作用:一次性可以接受多个相同类型的数据
例:计算一个人该月的消费总额

//写一个函数,负责计算一个月的消费总额
//数组类型参数,一次性接收多个相同类型的数据
public static void total(double[] ds){
  double sum = 0;
  for(int i=0; i<ds.length; i++){
      sum+=ds[i];
  }
  System.out.println("您该月的消费总额为:"+sum);
}

2、数组作为函数的返回值

作用:一次性可以返回多个相同类型的数据
例:返回1~n以内能被3整除且不能被5整数的整数

//写一个函数接受一个整数n,
//返回1~n以内的所有能被3整除且不能被5整除的数字
public static int[] ma(int n){
  //记录1~n以内符合条件的数字有多少个
  int count = 0;
  for(int i=2; i<n; i++){
      if(i%3==0 && i%5!=0)
          count++;
  }
  System.out.println("满足条件的整数个数为:" + count);
  //a数组保存满足条件的数字
  int[] a = new int[count];
  int index = 0;
  for(int i=2; i<n; i++){
      if(i%3==0 && i%5!=0){
          a[index] = i;
          index++;
      }
  }   
  return a;
}

3、数组扩容

当数组容量不够时应对其进行扩容操作
扩容步骤:
1)准备一个更大的数组
2)将原数组中的元素拷贝到新数组中
3)将新数组的引用赋值给原数组
例:

int[] b = new int[4];
b[0]=10;
b[1]=20;
b[2]=30;
b[3]=40;
//对数组进行扩容
  //步骤:
  // step 1: 准备一个更大的数组
  int[] newArray = new int[b.length*2];//新数组长度是原数组长度的两倍

  // step 2: 将原数组中的元素拷贝到新数组中
  for(int i=0; i<b.length; i++){
      newArray[i] = b[i]; 
  }
  // step 3: 将新数组引用赋值给原数组
  b = newArray;

其他扩容方式

1)System.arraycopy(…)

作用:将一个数组中元素拷贝到另外一个数组中
语法:System.arraycopy(原数组引用 , 拷贝起始下标 , 新数组引用 , 粘贴起始下标 , 拷贝数量);

2)java.util.Arrays.copyOf(….)

作用:自动创建一个新的数组,将原数组内容拷贝到新数组中,将新数组返回给调用者
语法:java.util.Arrays.copyOf(原数组引用,新数组长度);

四、二维数组

二维数组是一维数组中的一维数组
用一个一维数组将若干的一维数组保存起来形成一个整体(二维数组)

1、使用方法:

1)二维数组的声明

数据类型[][] 数组名;
int[][] a;

2)为高维数组分配空间

数组名 = new 数据类型[高维长度][]
a = new int[4][];

3)创建多个低维数组保存到高维数组的每一个元素中

数组名[高维下标] = 低维数组;
a[0] = new int[]{1,2,3};
a[1] = new int[3];

4)访问数组中的元素

数组名[高维下标][低维下标];
int b = a[0][0];
System.out.println(a[0][1]);

5)遍历二维数组

int[][] a = new int[4][];
a[0] = new int[]{10,50,90};
a[1] = new int[]{0,0,1};
a[2] = new int[]{90,90,100};
a[3] = new int[]{50,48,10};

for(int i=0; i<a.length; i++){
    for(int j=0; j<a[i].length; j++){
        System.out.print(a[i][j]);
    }
}

2、二维数组其他使用方法

1)不规则二维数组

int[][] a = new int[4][]; 
a[0] = new int[4];//a[0] 数组长度为4
a[1] = new int[2];//a[1] 数组长度为2
a[2] = new int[5];
a[3] = new int[1];

2)声明同时分配高、低维数组空间

数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];
int[][] a = new int[4][3];//创建一个四行三列构成的二维数组

3)显示初始化

数据类型[][] 数组名 = new 数据类型[][]{{一行一列值,一行二列值,一行三列值},{二行一列值...}};
int[][] a = new int[][]{
                      {1,2,3},
                      {4,5,6},
                      {7,8,9}
                  };
【简写形式】
数据类型[][] 数组名 = {{一行一列值,一行二列值,一行三列值},{二行一列值...}};