JAVA数组

什么是数组数组

数组本质上就是让我们能 “批量” 创建相同类型的变量.
注意事项: 在 Java 中, 数组中包含的变量必须是 相同类型.

创建数组

// 动态初始化
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };
// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };

 public class Yyyfh {
    public static void main(String[] args) {

       
            int[] array = {9};//[]里面不能写数字;
            int[] array2 = new int[3];
            int[] arr = new int[]{1, 2, 3};
        }
    }

注意事项: 静态初始化的时候, 数组元素个数和初始化数据的格式是一致的
其实数组也可以写成
int arr[] = {1, 2, 3};
这样就和 C 语言更相似了. 但是我们还是更推荐写成 int[] arr 的形式. int和 [] 是一个整体.

数组的使用

在JAVA中怎么怎么计算数组的长度

public class Yyyfh {
    public static void main(String[] args) {

            int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
            System.out.println(array.length);//计算数组的长度
            System.out.println(array[3]);
            System.out.println(array[7]);
            //array[3]=16;//写一些数据
            System.out.println(array[3]);
        }
        
        }

在这里插入图片描述

在这里插入图片描述

增强for循环

 public static void main9(String[] args) {
        int[] array = {1, 2, 3, 4};
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i] + "");
        }
        System.out.println();
        for (int x : array) {//增强for循环forch;
            System.out.println(x + "");
        }
        System.out.println();

    }

在这里插入图片描述
for循环可以拿到下标
for each 拿不到下标

数组赋值机制

1基本数据类型赋值,这个值就是具体的数据,而且相互不影响。 int n1 = 2; int n2 = n1;
2数组在默认情况下是引用传递,赋的值是地址。
在这里插入图片描述在这里插入图片描述
在JAVA中一个引用只能指向一个对象,不能同时指向多个对象

在这里插入图片描述
在这里插入图片描述

数组作为方法的参数

public static void main(String[] args) {
    int[] arr = {1, 2, 3};
    printArray(arr);
}
 
public static void printArray(int[] a) {
    for (int x : a) {
        System.out.println(x)

在这里插入图片描述

理解引用类型

认识null

null 在 Java 中表示 “空引用” , 也就是一个无效的引用.

public class Yyyfh {
    public static void main(String[] args) {
        int[] arr = null;
        System.out.println(arr[0]);


    }
}

在这里插入图片描述

初识 JVM 内存区域划分

在这里插入图片描述

数组

数组转字符串
import java.util.Arrays;
public class Yyyfh {
    public static void main(String[] args) {
       int[] arr = {1,2,3,4,5,6};

        String newArr = Arrays.toString(arr);
        System.out.println(newArr);


    }
}

我们可以得到{1,2,3,4,5,6,}

数组拷贝
import java.util.Arrays;
public class Yyyfh {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        int[] newArr = Arrays.copyOf(arr, arr.length);
        System.out.println("newArr: " + Arrays.toString(newArr));

        arr[0] = 10;
        System.out.println("arr: " + Arrays.toString(arr));
        System.out.println("newArr: " + Arrays.toString(newArr));


    }
}

找数组中的最大元素
mport java.util.Arrays;
public class Yyyfh {
    public static void main(String[] args) {

            int[] arr = {1,2,3,4,5,6};
            System.out.println(max(arr));
        }

        public static int max(int[] arr) {
            int max = arr[0];
            for (int i = 1; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            return max;


    }
}

求数组中元素的平均值
import java.util.Arrays;
public class Yyyfh {
    public static void main(String[] args) {
            int[] arr = {1,2,3,4,5,6};
            System.out.println(avg(arr));
        }

        public static double avg(int[] arr) {
            int sum = 0;
            for (int x : arr) {
                sum += x;
            }
            return (double)sum / (double)arr.length;
        }

    }

顺序查找
import java.util.Arrays;
public class Yyyfh {


    public static void main(String[] args) {
        int[] arr = {1,2,3,10,5,6};
        System.out.println(find(arr, 10));
    }

    public static int find(int[] arr, int toFind) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == toFind) {
                return i;
            }
        }
        return -1;  // 表示没有找到
    }
        }
二分查找
import java.util.Arrays;
public class Yyyfh {
    static int count = 0;
    public static void main(String[] args) {

                int[] arr = makeBigArray();
                int ret = binarySearch(arr, 9999);
                System.out.println("ret = " + ret + " count = " + count);
            }

            public static int[] makeBigArray() {
                int[] arr = new int[10000];
                for (int i = 0; i < 10000; i++) {
                    arr[i] = i;
                }
                return arr;
            }

            public static int binarySearch(int[] arr, int toFind) {
                int left = 0;
                int right = arr.length - 1;
                while (left <= right) {

                    count++;    // 使用一个变量记录循环执行次数

                    int mid = (left + right) / 2;
                    if (toFind < arr[mid]) {
                        // 去左侧区间找
                        right = mid - 1;
                    } else if (toFind > arr[mid]) {
                        // 去右侧区间找
                        left = mid + 1;
                    } else {
                        // 相等, 说明找到了
                        return mid;
                    }

                }
                // 循环结束, 说明没找到
                return -1;
            }
        }

检查数组的有序性
import java.util.Arrays;
public class Yyyfh {
    public static void main(String[] args) {

            int[] arr = {1,2,3,10,5,6};
            System.out.println(isSorted(arr));
        }

        public static boolean isSorted(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                if (arr[i] > arr[i + 1]) {
                    return false;
                }
            }
            return true;
        }
    }

二维数组

二维数组的定义二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.

数组的基本语法

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

数组的表示

public class Yyyfh {
    public static void main(String[] args) {
        int[][] arr = {
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12}
        };

        for (int row = 0; row < arr.length; row++) {
            for (int col = 0; col < arr[row].length; col++) {
                System.out.printf("%d\t", arr[row][col]);
            }
            System.out.println("");
        }
    }
        }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值