数组(Array)-Java
一、数组的定义
1、数组概述:是一个容器,本身属于引用数据库类型。
2、作用:一次存储多个数据。
3、特点:
(1)既可以存储基本数据类型,也可以存储引用数据类型。
(2)定长:数组定义时长度为多少,使用时就做多能存储多少数据。
4、定义
(1)动态初始化:在定义数组时,只规定长度
数据类型[] 数组名 = new 数据类型[](2)静态初始化:定义时直接给出数据
数据类型[] 数组名 = new 数据类型[] {元素1,元素2,...} => 不常用 数据类型[] 数组名 = {元素1,元素2,...} =>推荐使用//动态定义 int[] arr1 = new int[5] String[] arr2 = new String[5] //静态定义 String arr3 = {"张三","李四"}二、数组的操作
1、获取数组的长度
(1)格式
数组名.length(2)注意:length后面不要带小括号,因为length不是方法,而是属性。
2、索引
(1)特点:元素在数组中存放的位置(下标)。
(2)特点:
a、索引唯一。
b、索引都是从0开始的,最大索引长度是数组长度-1
(3) 索引的作用:用来查找和存储数据。
3、存储元素
格式:
数组名[索引值] = 值int[] arr1 = new int[3]; Scanner sc = new Scanner(System.in); for (int i = 0; i < arr1.length; i++) { // arr1.length动态控制添加几个数据 arr1[i] = sc.nextInt(); }4、获取元素
(1)格式
数组名[索引值](2)注意:
a、直接输出数组名,会输出数组在内存中的地址。
b、如果元素中没有存数据,获取数据时,会获取到元素的默认值。
整数:0 小数:0.0 引用数据类型:null
5、数组的遍历
遍历:将元素从数组中一个个获取出来(循环)
int[] arr1 = new int[3]; for (int i = 0; i < arr1.length; i++) { System.out.println(arr1[i]); }三、操作数组常见异常
1、索引越界异常:ArrayIndexOutBoundsException
int[] arr = new int[3]; //超出索引范围,就会抛出异常 arr[5] = 100;2、空指针异常:NullPinterException
原因:当一个对象为null时,再调用此对象中的其他成员。
int[] arr = new int[3]; arr = null; //将数组置为空 System.out.println(arr.lenght) //抛出异常练习
//查找数组中元素的最大值 int[] arr = {10,15,3,46,50,22,34}; int temp = arr[0]; for(int i =1 ; i<arr.length;i++){ if(temp<arr[i]){ temp=arr[i]; } } System.out.println(temp);四、数组的高级使用
1、数组复制
int[] arr1 = {1,2,3,4}; int[] arr2 = new int[4]; for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; }2、数组扩容:改变地址值。
int[] ald_arr = {1,2,3,4,5}; int[] new_arr = new int[10]; //将老数组中的值给新数组 for (int i = 0; i < ald_arr.length; i++) { new_arr[i] = ald_arr[i]; } //将新数组的地址值,给老数组 ald_arr = new_arr; for (int i = 0; i < ald_arr.length; i++) { System.out.println(ald_arr[i]); }3、数组合并
int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = {6, 7, 8, 9, 10}; //新数组:用于保存合并后的两个数组 int[] newArr = new int[arr1.length + arr2.length]; //将arr1的元素放入到数组中 for (int i = 0;i<arr1.length;i++){ newArr[i] = arr1[i]; } //arr2的数据添加到新数组中 for (int i = 0; i < arr2.length; i++) { newArr[arr1.length+i] = arr2[i]; //+i:是为了保证数组下标会发生变化,不会永远停留在 newArr[arr1.length] = 5 } for (int i = 0; i < newArr.length; i++) { System.out.print(newArr[i]+" "); } //1 2 3 4 5 6 7 8 9 10五、二维数组
1、定义与格式
(1)概述:数组中套了多个数组。
(2)定义格式
a、动态初始化
数据类型[][] 数组名 = new 数据类型[m][n] m:代表二维数组长度 n:代表一维数组长度b、静态初始化
数据类型[][] 数组名 = {{元素1,元素2,....},{元素1,元素2,....}}2、获取二维数组的长度
数组名.lengthint[][] arr = {{1,2,3,4},{5,6,7},{9}}; //获取数组长度 System.out.println(arr.length); //获取二维数组中,一维数组的长度 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i].length); }3、获取二维数组的数据
数组名[i][j] i:二维数组的下标 j:二维数组中,一维数组的下标int[][] arr = {{1,2,3,4},{5,6,7},{9}}; System.out.println(arr[1][2]); //74、二维数组赋值
//数组名[][] = 值 int[][] arr = new int[2][3]; arr[0][1] = 100;5、二维数组的遍历
int[][] arr = new int[2][3]; arr[0][1] = 100; for (int i = 0; i < arr.length; i++) { //arr[i]:表示的是一维数组 for (int j = 0;j<arr[i].length;j++){ System.out.print(arr[i][j]); } } //010 //000