一:数组的定义方式

1:动态初始化

  1. // 数据类型 数组名[] = new 数据类型[大小]
  2. ina a[] = new int [5]; //创建一个数组,名字a,存放5个int

2:第二种动态初始化

  1. //先声明数组,在new分配空间
  2. double scores []; //声明数组
  3. scores = new double [5]; //分配内存空间,可以存放数据

3:静态初始化

  1. //数据类型 数组名[] = new 数据类型 [大小];
  2. int[] num = {1,3,4,6,7,3};

二:数组的注意事项与细节

  • 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  • 数组创建后,如果没有赋值,有默认值
    • int 0,short 0, byte 0, long 0
    • float 0.0,double 0.0,char \u0000
    • boolean false,String null
  • 使用数组的步骤
    • 1:声明数组并开辟空间
    • 2:给数组各个元素赋值
    • 3:使用数组
  • 数组的下标是从0开始的
  • 数组下标必须在指定范围内使用,否则会报:数组下标越界异常
    • eg:image.png
  • 数组属引用类型,数组型数据是对象(object)

    三:数组的赋值机制

    ```java //基本数据类型赋值:这个值就是具体的数据,而且相互不影响 int n1 = 2; int n2 = n1; //修改n2的值不会影响n1

//数组在默认情况下是引用传递,赋的值是地址。 //理解数组数组赋值的内存图 int[] arr1 = {1,2,3}; int[] arr2 = arr1; //修改arr2同时会影响arr1

  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1658851226530-52e7ccde-51c3-465e-aabe-3bb85df41478.png#clientId=ua1350663-bae7-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=322&id=u22af1192&margin=%5Bobject%20Object%5D&name=image.png&originHeight=322&originWidth=940&originalType=binary&ratio=1&rotation=0&showTitle=false&size=251053&status=done&style=none&taskId=u8a500e06-b679-4650-a263-19b8add032c&title=&width=940)
  2. <a name="DqGrt"></a>
  3. # 四:数组拷贝
  4. ```java
  5. public static void main(String[] args) {
  6. int[] arr1 = {10,20,30};
  7. //创建一个arr2,开辟一片新的内存空间
  8. int[] arr2 = new int[arr1.length];
  9. //遍历 arr1 ,把每个元素拷贝到 arr2 对应的元素位置
  10. for(int i = 0; i < arr1.length; i++) {
  11. arr2[i] = arr1[i];
  12. }
  13. }

五:数组反转

  1. //两种方式
  2. //第一种:倒序输出
  3. //定义数组
  4. public static void main(String[] args) {
  5. int[] arr = {11, 22, 33, 44, 55, 66};
  6. int[] arr2 = new int[arr.length];
  7. //逆序遍历 arr
  8. for(int i = arr.length - 1, j = 0; i >= 0; i--, j++) {
  9. arr2[j] = arr[i];
  10. }
  11. //让arr指向arr2数据空间, 此时 arr 原来的数据空间就没有变量引用
  12. //会被当做垃圾,销毁
  13. arr = arr2;
  14. System.out.println("====arr 的元素情况=====");
  15. //6. 输出 arr 看看
  16. for(int i = 0; i < arr.length;i++){
  17. System.out.println(arr[i]);
  18. }
  19. }
  1. //第二种方式:前后交换
  2. public static void main(String[] args) {
  3. //定义数组
  4. int[] arr = {11, 22, 33, 44, 55,};
  5. int temp = 0;
  6. int len = arr.length;
  7. //通过temp临时值,来进行数据交换
  8. //循环次数为数组长度/2
  9. for( int i = 0; i < len / 2; i++) {
  10. temp = arr[len - 1 - i];//保存
  11. arr[len - 1 - i] = arr[i];
  12. arr[i] = temp;
  13. }
  14. System.out.println("===翻转后数组===");
  15. for(int i = 0; i < arr.length; i++) {
  16. System.out.print(arr[i] + "\t");//66,55,44,33,22,11
  17. }
  18. }

六:数组扩容

  1. public static void main(String[] args) {
  2. //定义要扩容的数据
  3. int[] arr = {1,2,3,5,6};
  4. Scanner scanner = new Scanner(System.in);
  5. do {
  6. //通过判断询问是否添加数据
  7. System.out.print("你要添加数据吗(y/n):");
  8. char num1 = scanner.next().charAt(0);
  9. if (num1=='n'){
  10. break;
  11. }
  12. //用num接收添加的数据
  13. System.out.print("请输入你要添加的数据:");
  14. int num = scanner.nextInt();
  15. //扩容的数组长度为原数组+1
  16. int[] arr2 =new int[arr.length+1];
  17. //将arr原来的值赋给新数组
  18. for (int i = 0; i < arr.length; i++) {
  19. arr2[i] =arr[i];
  20. }
  21. //将扩容的数组赋给数组的最后一位
  22. arr2 [arr2.length-1]=num;
  23. //将扩容后的数组指向原来的数组,原来的数组被jvm回收
  24. arr=arr2;
  25. //遍历扩容完成之后的数组
  26. System.out.println("扩容成功,数组元素为");
  27. for (int i = 0; i < arr2.length; i++) {
  28. System.out.print(arr2[i]+" ");
  29. }
  30. //根据需求循环执行程序
  31. System.out.println("您是否还要继续添加数据吗(y/n)");
  32. num1 = scanner.next().charAt(0);
  33. if (num1 == 'n'){
  34. break;
  35. }
  36. }while (true);
  37. }