【JavaSE学习】 Day3 数组

系列文章目录
        Day1 JavaSE环境配置
        Day2 JavaSE基础语法
        Day3 JavaSE数组
        Day4 JavaSE面向对象(上)
        Day5 JavaSE面向对象(中)
        Day6 JavaSE面向对象(下)
        Day7 JavaSE面向对象 
        Day8 JavaSE异常处理
        Day9 JavaSE多线程
        Day10 JavaSE集合
        Day11 JavaSE泛类
        Day12 JavaSEIO流
        Day13 JavaSE反射
 


上期文章讲述了JavaSE基本语法,本次文章将来讲述JavaSE数组的使用

一、数组介绍

 数组的理解:

  • 数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

 数组相关的概念:

  •  数组名
  •  元素
  •  角标、下标、索引
  •  数组的长度:元素的个数

 数组的特点:

  •  数组是序排列的
  •  数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  •  创建数组对象会在内存中开辟一整块连续的空间
  •  数组的长度一旦确定,就不能修改。

 数组的分类:

  •   照维数:一维数组、二维数组。
  •   照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组。

二、一维数组

一维数组的声明与初始化

//正确的方式:    
        int num;//声明
		num = 10;//初始化
		int id = 1001;//声明 + 初始化
		
		int[] ids;//声明
		//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
		ids = new int[]{1001,1002,1003,1004};
		//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
		String[] names = new String[5];

	int[] arr4 = {1,2,3,4,5};//类型推断

//错误的方式:
//		int[] arr1 = new int[];
//		int[5] arr2 = new int[5];
//		int[] arr3 = new int[3]{1,2,3};








一维数组元素的引用:通过角标的方式调用。
      

  //数组的角标(或索引从0开始的,到数组的长度-1结束。
        names[0] = "王铭";
        names[1] = "王赫";
        names[2] = "张学良";
        names[3] = "孙居龙";
        names[4] = "王宏志";//charAt(0)

数组的属性:length

System.out.println(names.length);//5
System.out.println(ids.length);

说明:

数组一旦初始化,其长度就是确定的。arr.length
数组长度一旦确定,就不可修改。

一维数组的遍历

for(int i = 0;i < names.length;i++){
    System.out.println(names[i]);
}

一维数组元素的默认初始化值

  • 数组元素是整型:0
  • 数组元素是浮点型:0.0
  • 数组元素是char型:0或'\u0000',而非'0'
  • 数组元素是boolean型:false 
  • 数组元素是引用数据类型:null

三、二维数组

如何理解二维数组?

  • 数组属于引用数据类型
  • 数组的元素也可以是引用数据类型
  • 一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。

二维数组的声明与初始化

//正确的方式:
        int[] arr = new int[]{1,2,3};//一维数组
        //静态初始化
        int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
        //动态初始化1
        String[][] arr2 = new String[3][2];
        //动态初始化2
        String[][] arr3 = new String[3][];
    //也是正确的写法:
        int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
        int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断
//错误的方式:
//        String[][] arr4 = new String[][4];
//        String[4][3] arr5 = new String[][];
//        int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};

如何调用二维数组元素

System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);//

二维数组的属性

        System.out.println(arr4.length);//3
        System.out.println(arr4[0].length);//3
        System.out.println(arr4[1].length);//4

遍历二维数组元素

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

二维数组元素的默认初始化值

  •       规定:二维数组分为外层数组的元素,内层数组的元素
  •       int[][] arr = new int[4][3];
  •       外层元素:arr[0],arr[1]等
  •       内层元素:arr[0][0],arr[1][2]等
  •       数组元素的默认初始化值 
  •       针对于初始化方式一:比如:int[][] arr = new int[4][3];
  •       外层元素的初始化值为:地址值
  •       内层元素的初始化值为:与一维数组初始化情况相同    
  •       针对于初始化方式二:比如:int[][] arr = new int[4][];
  •       外层元素的初始化值为:null
  •       内层元素的初始化值为:不能调用,否则报错。

四、数组的常见操作

数组的赋值与复制

int[] array1,array2;
array1 = new int[]{1,2,3,4};
//赋值
array2 = array1;
//如何理解:将array1保存的数组的地址值赋给了array2,使得array1和array2
//共同指向堆空间中的同一个数组实体。

 复制

array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
    array2[i] = array1[i];
}
/*
如何理解:我们通过new的方式,给array2在堆空间中新开辟了数组的空间。
将array1数组中的元素值一个一个的赋值到array2数组中。
*/

数组元素的反转

//方法一:
       for(int i = 0;i < arr.length / 2;i++){
           String temp = arr[i];
           arr[i] = arr[arr.length - i -1];
           arr[arr.length - i -1] = temp;
       }
        
//方法二:
      for(int i = 0,j = arr.length - 1;i < j;i++,j--){
          String temp = arr[i];
          arr[i] = arr[j];
          arr[j] = temp;
}      

冒泡排序

  

int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
        
        //冒泡排序
        for(int i = 0;i < arr.length - 1;i++){
            
            for(int j = 0;j < arr.length - 1 - i;j++){
                
                if(arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
                
            }
            
        }        

五、Arrays工具类的使用

理解

  • 定义在java.util包下。

  • Arrays:提供了很多操作数组的方法。

使用

	//1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
		int[] arr1 = new int[]{1,2,3,4};
		int[] arr2 = new int[]{1,3,2,4};
		boolean isEquals = Arrays.equals(arr1, arr2);
		System.out.println(isEquals);
		
		//2.String toString(int[] a):输出数组信息。
		System.out.println(Arrays.toString(arr1));
		
			
		//3.void fill(int[] a,int val):将指定值填充到数组之中。
		Arrays.fill(arr1,10);
		System.out.println(Arrays.toString(arr1));
		

		//4.void sort(int[] a):对数组进行排序。
		Arrays.sort(arr2);
		System.out.println(Arrays.toString(arr2));
		
		//5.int binarySearch(int[] a,int key)
		int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
		int index = Arrays.binarySearch(arr3, 210);
		if(index >= 0){
			System.out.println(index);
		}else{
			System.out.println("未找到");
		}

六、数组常见异常

数组角标越界异常:ArrayIndexOutOfBoundsException

       int[] arr = new int[]{1,2,3,4,5};
        
       for(int i = 0;i <= arr.length;i++){

           System.out.println(arr[i]);

       }
        
       System.out.println(arr[-2]);
        
       System.out.println("hello");


空指针异常:NullPointerException
 

//情况一:
        int[] arr1 = new int[]{1,2,3};

        arr1 = null;

        System.out.println(arr1[0]);
        
//情况二:
        int[][] arr2 = new int[4][];

        System.out.println(arr2[0][0]);
        
//情况三: 
        String[] arr3 = new String[]{"AA","BB","CC"};
        
        arr3[0] = null;
        
        System.out.println(arr3[0].toString());

小知识:一旦程序出现异常,未处理时,就终止执行。

总结

        本次文章讲述的是JavaSE数组的使用,讲述一维数组、二维数组创建和使用、常见数组操作和使用、Arrays工具类的使用、数组的常见异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小程序○

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值