数组

数组

含义:

  一组有着类型相同的连续存储空间的数据类型

创建方式:

  值未知:

    先声明后创建:

      int[] array;

      array = new int[5];

    直接创建

      int[] array = new int[5];

  值已知:

    先声明后创建:

      int[] array;

      array = new int[]{1, 2, 3, 4, 5};

    直接创建:

      int[] array = {1, 2, 3, 4, 5};

使用:

  数组名[下标];

  调用下标范围:0~创建数组的长度-1

查询数组长度方法:

  数组名.length;

默认值:

  在创建数组未对数组初始化是自动将数组初始化

  下列是基本数据类型在自动初始化时的默认值

  • 对于整型数组(int[]、short[]、byte[]、long[]等),默认值为0。

  • 对于浮点型数组(float[]、double[]等),默认值为0.0。

  • 对于字符型数组(char[]),默认值为’\u0000’(空字符)。

  • 对于布尔型数组(boolean[]),默认值为false。

  • 对于引用类型数组(String[]、Object[]等),默认值为null。

数组名本质:

  数组名存储的是第一个数组元素的地址,通过调用数组名找到第一个元素地址,来找到所有的数组元素

数组长度:

  0~内存大小(理论上无穷大)

数组复制:

  数组是一种引用类型,数组名存储的是第一个元素的地址,如果用数组名赋值给另一个数组,它们将指向同一个地址,如果对任意数组进行修改,另一个数组也会发生修改,并没有复制成功

int[] array = {1, 2, 3, 4, 5};
int[] arrayCopy = array;
arrayCopy[0] = 100;
System.out.println("array[0]:"+array[0]+" arrayCopy:"+arrayCopy[0]);

  由此可见直接赋值不能完成数组的复制

  对此有两种复制方法:

    创建新数组,并用循环的方法将原数组的元素复制到新数组中
int[] array = {1, 2, 3, 4, 5};
int[] arrayCopy = new int[array.length];
for (int i = 0; i < array.length; i++) {
arrayCopy[i] = array[i];
}
arrayCopy[0] = 100;
System.out.println("array[0]:"+array[0]+" arrayCopy:"+arrayCopy[0]);

     第二种是使用System包中的arraycopy方法复制数组

    System.arraycopy(输入数组,输入数组开始下标,存入数组,存入数组开始下标,复制数量)

int[] array = {1, 2, 3, 4, 5};
int[] arrayCopy = new int[array.length];
System.arraycopy(array, 0, arrayCopy, 0, array.length);
arrayCopy[0] = 100;
System.out.println("array[0]:"+array[0]+" arrayCopy:"+arrayCopy[0]);

输出方式:

  for循环输出

  增强型for循环输出

  Arrays包输出

import java.util.Arrays;

public class TestPrintArray {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
System.out.println("for循环输出:");
//for循环输出
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
//增强型for循环输出
System.out.println("\n增强型for循环输出:");
for (int i : array) {
System.out.print(i+" ");
}
//Arrays.toString()方法输出
System.out.println("\nArrays.toString()方法输出:");
System.out.println(Arrays.toString(array));
}
}

二维数组

含义:

  存储类型相同一维数组的数组

创建:

  同一维数组的创建,本质上也是数组

  声明:

    int [][] array = new int[3][5];

  赋值:

    array[2][4] = 5;

  调用:

    System.out.println(array[2][4]);

  已知数据:

    int[][] array = {{1, 2, 3}, {12, 4}, {3, 5, 6, 8, 3}};

  不同:

    创建是第一个中括号的参数不能省略,内层数组的长度可以不同,但类型必须相同

    int[][] array = new int[3][];

    array[0] = new int[3];

二维数组名:

  二维数组元素存储的是内层的地址

动态数组

  解释:

    正常情况下数组在创建时数组的长度就已经确定下来,当需要存入的数据超过数组容量,如果不能存储就会导致数据丢失

  原理:

    当需要装进的数据超过数组容量,重新创建一个更大的数组将原来的数据和待装数据全部传入,本质上动态数组是一种方法,并不是一种数据类型

  使用:

//创建动态数组
//创建容量为5的数组
int[] array = new int[5];
//循环向数组内存储数据
for (int i = 0; i < 200; i++) {
//当数组容量不够时
if (i>=array.length) {
//重新创建一个新数组,使新数组的容量为原数组的2倍
int[] arrayNew = new int[array.length*2];
//将原数组中的数据复制到新数组中
System.arraycopy(array, 0, arrayNew, 0, array.length);
//修改原数组的引用地址,指向新数组
array = arrayNew;
System.out.println(array.length);
System.out.println(Arrays.toString(array));
}
array[i] = i;
}

 

posted @ 2023-07-07 17:02  Lance_001  阅读(21)  评论(0)    收藏  举报