数组
-
数组的四个基本特点
- 长度确定,一旦被创建,大小就不可改变
- 数据类型相同,数组中的元素的数据类型必须统一
- 元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属引用类型,数组也可看成是对象,每个元素相当于成员变量。Java中对象是在堆中的,数组无论保存原始类型还是其他对象类型,数组本身是在堆中的。
-
数组概述
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成
- 每一个数据为一个数组元素,每个元素有相应的下标确定,数组的下标初始为0。即下标为0代表第一个元素,下标为1代表第二个元素,以此类推...
-
数组声明创建
-
首先声明数组变量:
dataType[] arrayRefVar;//首选方法 dataType arrayRefVar[];//效果相同,但不是首选方法,这是Java初期为了让c与c++程序员适应(c/c++格式) -
Java语言使用new操作符来创建数组:
dataType[] arrayRefVar=new dataType[arraySize]; -
数组的元素是通过索引访问的,数组索引从0开始
-
获取数组的长度:
arrays.length
-
-
数组使用(*)
package com.study.array; public class ArrayDemo03 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; //打印全部数组元素 for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } System.out.println("=================="); //计算所有元素的和 int sum=0; for (int i = 0; i < arrays.length; i++) { sum=sum+arrays[i]; } System.out.println(sum); System.out.println("=================="); //查找最大元素 int max=arrays[0]; for (int i = 1; i < arrays.length; i++) { if(arrays[i]>max){ max=arrays[i]; } } System.out.println("max:"+max); } } -
多维数组
-
多维数组可以看成是数组的数组,比如二维数组的每一个元素都是一个一维数组
-
二维数组
int a[][]=new int[2][5];把a[...]看成A,二维数组即可拆分为一维数组
package com.study.array; public class ArrayDemo05 { public static void main(String[] args) { int[][] array={{1,2},{2,3},{3,4},{4,5}}; printArray(array[0]); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } }
-
-
Arrays类(*)
-
数组的工具类java.util.Arrays
-
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作。
-
查看JDK帮助文档
-
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能”)
-
常用功能
- 给数组赋值:通过fill方法。
- 对数组排序:通过sort方法,按升序。
- 比较数组:通过equals方法比较数组中元素值是否相等。
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分法操作。
-
-
稀疏数组
- 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
- 稀疏数组的处理方式:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
行(row) 列(col) 值(value) 0 3 22 0 6 15 1 1 11 1 5 17 0 0 0 22 0 0 15
0 11 0 0 0 17 0
......
package com.study.array; public class ArrayDemo08 { public static void main(String[] args) { //1.创建二维数组 int[][] array1 = new int[11][11]; array1[1][2] = 1; array1[2][3] = 2; //输出原始的数组 System.out.println("输出原始的数组"); for(int[] ints : array1){ for(int anInt : ints){ System.out.print(anInt+"\t"); } System.out.println(); } System.out.println("===================="); //转换为稀疏数组保存 //获取有效值的个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if(array1[i][j]!=0){ sum++; } } } System.out.println("有效值的个数:"+sum); //2.创建一个稀疏数组的数组 int[][] array2=new int[sum+1][3]; array2[0][0]=11; array2[0][1]=11; array2[0][2]=sum; //遍历二维数组,将非零的值,存放稀疏数组中 int count=0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { if(array1[i][j]!=0){ count++; array2[count][0]=i; array2[count][1]=j; array2[count][2]=array1[i][j]; } } } //输出稀疏数组 System.out.println("稀疏数组:"); for (int[] ints:array2) { for (int anInt:ints) { System.out.print(anInt+"\t"); } System.out.println(""); } System.out.println("======================"); System.out.println("还原"); //1.读取稀疏数组 int[][] array3=new int[array2[0][0]][array2[0][1]]; //2.给其中的元素还原它的值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]]=array2[i][2]; } for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { System.out.print(array3[i][j]+"\t"); } System.out.println(" "); } } }
浙公网安备 33010602011771号