• Java基础语法之数组


      💕十年生死两茫茫,不思量,自难忘💕

    作者:Mylvzi 

     文章主要内容:Java学习之--数组 

    一.数组的基本概念

    1.定义

     数组是相同数据类型的集合!使用数组来存放多个相同类型的数据!

    2.Java中定义数组的方式

    1. // 通过new关键字定义一个数组
    2. int[] arr1= new int[10];
    3. int[] arr2 = {1,2,3,4,5};

    注意:Java中定义数组的方式和C语言不同,Java中将数组名放在最后,前面是数组类型,这样定义更符合利用数据类型定义变量的方法!

    3.Java中如果不给数组赋初始值,系统会自动赋默认值

    如果是引用类型会赋值为null

    4.再次深入理解引用类型!

            数组是一种引用类型,数组名就是通过引用类型创建的引用变量!引用变量存在于栈区,存放的是数组的地址!而数组本身是在堆上开辟的!下面通过两个代码来详细讲解!

    1. public static void func(int[] a) {
    2. a[0] = 10;
    3. System.out.println("a[0] = " + a[0]);// 输出10
    4. }
    5. public static void main(String[] args) {
    6. int[] arr = {1, 2, 3};
    7. func(arr);
    8. System.out.println("arr[0] = " + arr[0]);// 输出10
    9. }

    1. public static void func() {
    2. int[] array1 = new int[3];
    3. array1[0] = 10;
    4. array1[1] = 20;
    5. array1[2] = 30;
    6. int[] array2 = new int[]{1,2,3,4,5};
    7. array2[0] = 100;
    8. array2[1] = 200;
    9. array1 = array2;
    10. array1[2] = 300;
    11. array1[3] = 400;
    12. array2[4] = 500;
    13. for (int i = 0; i < array2.length; i++) {
    14. System.out.println(array2[i]);// 输出100 200 300 400 500
    15. }
    16. }

    对象一定是在堆上的!但引用变量不一定在栈上 

    二.数组的基本操作

    1.自动获得数组长度

    1. // 利用数组方法获取长度
    2. int[] arr1 = new int[10];
    3. System.out.println(arr1.length);// 输出10
    4. char[] arr2 = new char[8];
    5. System.out.println(arr2.length);// 输出8

     2.for循环遍历数组(两种方式)

    1. // for循环打印数组
    2. int[] arr1 = {1,2,3,4,5};
    3. for (int i = 0; i
    4. System.out.println(arr1[i]);
    5. }
    6. // foreach循环打印数组-->也被称为加强for循环
    7. // 只能打印数组,无法拿到下标
    8. for (int x:arr1) {
    9. System.out.println(x);
    10. }

    3.Arrays方法之将数组以字符串的形式输出 

    Arrays方法是Java中重要的一种方法,用来对数组进行操作!

    1. // Arrays.toString以字符串的形式打印数组
    2. int[] arr1 = {1,2,3,4,5};
    3. char[] arr2 = {'a','b','c'};
    4. String[] arr3 = {"hello world!"};
    5. System.out.println(Arrays.toString(arr1));
    6. System.out.println(Arrays.toString(arr2));
    7. System.out.println(Arrays.toString(arr3));

    4.Arrays方法之数组的拷贝 

    1. // 数组的复制
    2. int[] arr1 = new int[10];//原数组 新数组的长度
    3. int[] arr2 = Arrays.copyOf(arr1,arr1.length);
    4. int[] arr3 = Arrays.copyOf(arr1,arr1.length*2);
    5. System.out.println(Arrays.toString(arr1));
    6. System.out.println(Arrays.toString(arr2));
    7. System.out.println(Arrays.toString(arr3));

     

    注意:还可以利用数组的拷贝实现对原数组的增删数据

    1. // 可以利用数组的复制实现对原数组增删数据
    2. int[] arr1 = {1,2,3,4,5};
    3. System.out.println(Arrays.toString(arr1));
    4. arr1 = Arrays.copyOf(arr1,arr1.length-1);// 删除原数组最后一个元素
    5. System.out.println(Arrays.toString(arr1));
    6. int[] arr2 = {1,2,3,4,5};
    7. arr2 = Arrays.copyOf(arr2,arr2.length+1);// 为原数组增添一个元素
    8. System.out.println(Arrays.toString(arr2));

     

    还有一种简单的复制数组的方法arr.clone

    1. int[] arr1 = {1,2,3,4,5};
    2. int[] arr2 =arr1.clone();
    3. System.out.println("复制后的数组:"+Arrays.toString(arr2));
    4. // 输出:1 2 3 4 5

    5.判断两个数组是否相等

    1. int[] arr1 = {1,2,3,4,5};
    2. int[] arr2 =arr1.clone();
    3. // 调用方法
    4. boolean isEqual = Arrays.equals(arr1,arr2);
    5. System.out.println(isEqual);// 输出true

    6.判断数组是否为空

    1. int[] arr1 = {1,2,3,4,5};
    2. int[] arr2 =arr1.clone();
    3. // 判断是否为空
    4. boolean isEmpty = arr1.length == 0;// 类似于三目运算符的逻辑
    5. System.out.println(isEmpty);

     7.填充数字

    1. int[] arr1 = new int[10];
    2. // 填充数组
    3. Arrays.fill(arr1,5);
    4. System.out.println(Arrays.toString(arr1));

    在指定范围内填充 

     ​​​​​​​Java中的from to是左闭右开

    8.对数组进行升序排序

    1. int[] arr = {23,14,999,33,1};
    2. // 对原数组进行升序排序
    3. Arrays.sort(arr);
    4. System.out.println(Arrays.toString(arr));
    5. // 输出:1 14 23 33 999

    9.二分查找!

    1. int[] arr = {23,14,999,33,1};
    2. // 注意二分查找只适用于有序数组
    3. Arrays.sort(arr);
    4. int i = Arrays.binarySearch(arr,999);
    5. System.out.println(i);// 输出4

    10.作为函数的返回值!!!

      C语言中数组无法作为函数的返回值,而Java中可以返回数组;

    以斐波那契数列为例 

    1. // 返回数组的函数
    2. public static int[] fib(int x) {
    3. int[] arr = new int[x];
    4. arr[0] = arr[1] = 1;
    5. for (int i = 2; i
    6. arr[i] = arr[i-1] +arr[i-2];
    7. }
    8. return arr;
    9. }
    10. public static void main(String[] args) {
    11. int[] arr= fib(10);
    12. System.out.println(Arrays.toString(arr));

    三.二维数组

    1.二维数组的初始化 

    注意在Java中不能省略行数,列数可以省略(和C语言相反)

    1. int[][] arr1 = new int[10][];
    2. int[][] arr2 = new int[][10];// err java中二维数组的列不能省去行
    3. int[][] arr3 = {{1,2,3},{2,3,4},{3,4,5}};

    2.二维数组的打印

      二维数组是一维数组的数组,从这个方面理解可以获取它的行数和列数 

    1. int[][] arr1 = {{1,2,3},{2,3,4}};// 定义一个两行三列的二维数组
    2. for (int i = 0; i < arr1.length ; i++) {// 二维数组名.length代表行数
    3. for (int j = 0; j 0].length ; j++) {// 二维数组第一个元素的长度代表列数
    4. System.out.print(arr1[i][j]);
    5. }
    6. System.out.println();
    7. }

    再看一个代码:

    总结:

    1. 二维数组名.length代表行数

    2.一维数组的元素个数就是二维数组的列数

    2.不等长数组

      因为Java中行数必须指定,而列数可以不指定,也就是每一列的列数不确定,故而可以设置不等长的二维数组

     

    四.总结

      数组是一种常用的引用类型,主要用于存储多个相同类型的数据;在Java中提供了很多与数组相关的包,类,方法如Arrays,要多去了解这些方法,会大大提高开发效率;同时,要深入理解二维数组是一维数组的数组,如何获取行数和列数,要注意和C语言中二维数组的差别! 

  • 相关阅读:
    Spring AOP+Redis实现接口访问限制
    AP8100 DC-DC 升压恒压电源管理芯片
    Spring Boot异常处理和单元测试
    《Java基础知识》Java ArrayList源码分析2
    解决vue-servlet数据传输时出现的跨域问题
    Android 7.1.2 更换原生输入法
    美信监控易:网络管理之链路专线管理
    2020 Java开发者数据分析:中国已成为 Java 第一大国
    LVS+Haproxy
    程序分析与优化 - 9 附录 XLA的缓冲区指派
  • 原文地址:https://blog.csdn.net/Mylvzi/article/details/132891094