Java基础笔记之数组

6、数组

6.1、数组的概述

数组(Array):

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

  • 数组名

  • 下标(或索引)

  • 元素

  • 数组的长度:元素的个数

数组的特点:

  • 数组是有序排列的
  • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址
  • 数组的长度一旦确定,就不能修改。

我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。

数组的分类:

  • 按照维度:一维数组、二维数组、三维数组、…
  • 按照元素的数据类型分:
    • 基本数据类型元素的数组
    • 引用数据类型元素的数据(即对象数组)

6.2、一维数组的使用

  • 一维数组的声明和初始化
  • 如何调用数组的指定位置的元素
  • 如何获取数组的长度
  • 如何遍历数组
  • 数组元素的默认初始化值
  • 数组的内存解析

1、一维数组的声明和初始化

public static void main(String[] args) {
		//一维数组的声明和初始化
		int num;//声明
		num = 10;//初始化
		
		int id = 1001;//声明和初始化
		
		
		int[] ids;//声明	
		//静态初始化:
		//数组的初始化和数组元素的赋值操作同时进行
		ids = new int[] {1001,1002,1003};
		//动态初始化:
		//数组的初始化和数组元素的赋值操作分开进行
		String[] names = new String[6];
	
	}


//一些正确写法
		int[] arr4 = {1,2,3,4,5};//类型推断
//只有声明和赋值一行才可以类型推断

总结:

  • 数组一旦初始化完成,其长度就确定了。

2、如何调用数组的指定位置的元素

  • 通过角标的方式调用
//数组的角标(或索引)从0开始的,到数组的长度-1结束。
		
		names[0] = "魔神";
		names[1] = "凯撒";
		names[2] = "凯撒";
		names[3] = "凯撒";
		names[4] = "凯撒";
		names[5] = "凯撒";
		//Ctrl+alt+↓   复制到下一行
		names[6] = "凯撒";//越界!Index 6 out of bounds for length 6
	

3、如何获取数组的长度

属性:length

System.out.println(names.length);

System.out.println(ids.length);

结果:
6
3

4、如何遍历数组

/*
		System.out.println(names[0]); 
		System.out.println(names[1]);
		Ctrl+/注释或者取消注释
		Ctrl+shift+/ 多行注释 
		Ctrl+shift+\ 取消多行注释 
		
*/
for(int i = 0;i <= names.length;i++) {
			System.out.println(names[i]);
		}

5、数组元素的默认初始化值

  • 数组元素是整型: 0
  • 数组元素是浮点型: 0.0
  • 数组元素是char型:ASCII 中 0(null) 或者 ‘/u0000’, 而非‘0’
  • 数组元素是boolean型:false
  • 数组元素是引用数据类型:null
int[] arr = new int[4];
		
		for(int i = 0;i < arr.length;i++) {
			System.out.println(arr[i]);
		}

结果:

0
0
0
0

6、数组的内存解析(简单理解)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-11V9KQhk-1621434244035)(https://www.picbed.cn/images/2021/05/17/1.png)]

6.3、多维数组的使用

  • Java语言里提供了支持多维数组的语法
  • 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
  • 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在,其实,从数组底层的运行机制来看,其实没有多维数组。

二维数组的使用:

规定:二维数组分为外层数组的元素,内层数组的元素

  • 二维数组的声明和初始化
  • 如何调用数组的指定位置的元素
  • 如何获取数组的长度
  • 如何遍历数组
  • 数组元素的默认初始化值
  • 数组的内存解析

1、二维数组的声明和初始化

int[] arr = new int[] {1,2,3};//一维数组
		
		//1、二维数组的声明和初始化
		//静态初始化
		int[][] arr1 = new int[][] {{1,2,3},{4,5,6}};
		//动态初始化1
		int[][] arr2 = new int[3][2];
		//动态初始化2
		int[][] arr3 = new int[3][];
		
		
		//一些正确写法
		int arr4[][]  = new int[][] {{1,2,3},{4,5,6}};
		int[] arr5[]  = new int[][] {{1,2,3},{4,5,6}};

2、如何调用数组的指定位置的元素

		
		//1、二维数组的声明和初始化
				//静态初始化
				int[][] arr1 = new int[][] {{1,2,3},{4,5,6}};
				//动态初始化1
				String[][] arr2 = new String[3][2];
				//动态初始化2
				String[][] arr3 = new String[3][];
		//如何调用数组的指定位置的元素
		System.out.println(arr1[0][1]);//2
		
		System.out.println(arr2[1][1]);//null
		
		
		arr3[1] = new String[4];//没有这个就会出现java.lang.NullPointerException
		System.out.println(arr3[1][0]);
  结果:
  2
null
null

3、如何获取数组的长度

//1、二维数组的声明和初始化
				//静态初始化
				int[][] arr1 = new int[][] {{1,2,3},{4,5,6}};
				//动态初始化1
				String[][] arr2 = new String[3][2];
				//动态初始化2
				String[][] arr3 = new String[3][];
				
				int arr4[][]  = new int[][] {{1,2,3},{4,5,6}};
				int[] arr5[]  = new int[][] {{1,2,3},{4,5,6}};
		//如何调用数组的指定位置的元素
		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]);//java.lang.NullPointerException
		
		
//获取长度!!!
		
		System.out.println(arr4.length);
		System.out.println(arr4[0].length);

4、如何遍历数组

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

5、数组元素的默认初始化值

int[][] arr = new int[4][3];
		
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[0][0]);
		

		
//结果
[[I@182decdb//[[表示二维数组,I表示int型,@后面表示地址
[I@7637f22
0

float[][] arr = new float[4][3];
		

		System.out.println(arr[0]);
		System.out.println(arr[0][0]);
结果:
[F@182decdb
0.0
    
    
String[][] arr = new String[4][3];
		

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


结果:
   [Ljava.lang.String;@182decdb
null 
double[][] arr = new double[4][];
		

System.out.println(arr[1]);//null  数组是引用数据类型
		System.out.println(arr[0][0]);//空指针异常

针对于初始化方式一:

比如:int[][] arr = new int[4][3];

外层元素的初始化值为:地址值

内层元素的初始化值为:与一维数组初始化情况相同!

针对于初始化方式二:

比如:int[][] arr = new int[4][];

外层元素的初始化值为:null

内层元素的初始化值为:不能调用!

6、数组的内存解析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1tEbg1J-1621434244047)(https://www.picbed.cn/images/2021/05/19/3.png)]

6.5、Arrays工具类的使用

某个类后面加S 一般是这个类的工具类

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组

  • 比如排序和搜索

的各种方法。

boolean equals(int[] a,int[] b)判断两个数组是否相等
String toString(int[] a)输出数组信息
void fill(int[] a,int val)将指定值填充到数组之中
void sort(int[] a)对数组进行排序
int binarySearch(int[] a,int key)对排序后的数组进行二分法检索指定的值

演示:

/*
		 * java.util.Arrays:操作数组的工具类。
		 * 里面定义了很多操作数组的方法
		 * 
		 */
	//1、	boolean  equals(int[] a,int[] b)
			int[] arr1 = new int[]{1,2,3,4};
			int[] arr2 = new int[]{1,4,2,3};
			
			
			
			boolean isEquals = Arrays.equals(arr1, arr2);
			System.out.println(isEquals);
			//int[] arr1 = new int[]{1,2,3,4};
			//int[] arr2 = new int[]{1,2,3,4};
			//true
	//2、   	String toString(int[] a)
			System.out.println(Arrays.toString(arr1));
			//[1, 2, 3, 4]
    //3、   void fill(int[] a,int val)      
			Arrays.fill(arr1, 10);
			System.out.println(Arrays.toString(arr1));
			//[10, 10, 10, 10]
	//4、	 void sort(int[] a)        
			Arrays.sort(arr2);
			System.out.println(Arrays.toString(arr2));
			//[1, 2, 3, 4]
	//5、	int binarySearch(int[] a,int key) 
			int[] arr = new int[] {-98,-34,2,34,54,66,79,105,210,333};
			int index = Arrays.binarySearch(arr, 210);
			System.out.println(index);//负数就是没找到!


结果:
    false
[1, 2, 3, 4]
[10, 10, 10, 10]
[1, 2, 3, 4]
8

6.6、数组使用中的常见异常

数组中常见异常:

1、数组角标越界的异常:(左右都有越界)

  • ArrayIndexOutOfBoundsException

2、空指针异常:

  • NullPointerException
	//情况1
		int[] arr = new int[]{1,2,3};
		arr=null;
		System.out.println(arr[0]);

本指向数组,赋值为null,无指向,则为空指针!

//情况2
	int[][] arr = new int[4][];
		System.out.println(arr[0][0]);
//情况2
String[] arr = new String[] {"AA","BB","CC"};
		System.out.println(arr[0].toString());
//输出AA
String[] arr = new String[] {"AA","BB","CC"};
		arr[0] = null;
		System.out.println(arr[0].toString());
//此时空指针异常
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值