数组
1创建数组与初始化
int[] a; //推荐,Java声明数组的方法
a = new int[10]; //创建数组,分配10个空间
int b[]; // C、C++声明数组的方法
int[] c = {1,2,3,4,5};//静态初始化
int[] d = new int[5];//动态初始化,默认数据都是0
2数组的基本特点
1.数组被创建后,大小不可变。
2.一个数组的元素类型相同。
3.数组的元素类型包括基本类型和引用类型。
4.数组本身是对象,数组变量属于引用类型,Java中对象保存在堆中(使用new关键字new出来的)。
3拓展
(1)常见报错:
ArrayIndexOutOfBoundsException:数组下边越界
(2)for-each循环
//a.for for-each循环,i:元素,a:数组名
//取不到下标,适合打印输出,不适合操作
for (int i : a) {
System.out.print(a[i]+" ");
}
(3)稀疏数组
稀疏数组可以用来以压缩的方式保存空间大数据少的二维数组。
/**
* 用稀疏数组保存只有4个数据的10*10二维数组
* 0 0 0 0 0 0 0 0 4 0
* 0 0 5 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 5 0
* 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 3 0 0 0
* 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0
* 0 0 0 0 0 0 0 0 0 0
*/
public class SparseArray {
public static void main(String[] args) {
//1.创建一个10*10的二维数组
int[][] ints = new int[10][10];
ints[0][8] = 4;
ints[1][2] = 5;
ints[2][8] = 5;
ints[5][6] = 3;
System.out.println("output original array:");
printTwoArray(ints);
System.out.println("==========================================");
System.out.println("output sparse array:");
printSparseArray(toSparseArray(ints));
System.out.println("==========================================");
System.out.println("output two_dimension array:");
printTwoArray(totwoDimArray(toSparseArray(ints)));
}
//2.普通二维数组转化为稀疏数组
public static int[][] toSparseArray(int[][] arr){
//统计有效值个数
int count = 0;
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr[i].length; j++) {
if(arr[i][j]!=0){
count++;
}
}
}
//创建稀疏数组
int[][] sp = new int[count+1][3];
sp[0][0] = 10;
sp[0][1] = 10;
sp[0][2] = count;
//遍历二维数组,将有效值放入稀疏数组中
int n = 1;
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr[i].length; j++) {
if(arr[i][j]!=0){
sp[n][0] = i;
sp[n][1] = j;
sp[n][2] = arr[i][j];
n++;
}
}
}
return sp;
}
//3.稀疏数组转化为普通二维数组
public static int[][] totwoDimArray(int[][] arr){
int[][] a = new int[10][10];
//遍历稀疏数组,将有效值放入二维数组中
for (int i=1; i<arr.length; i++){
a[arr[i][0]][arr[i][1]] = arr[i][2];
}
return a;
}
//打印二维数组元素
public static void printTwoArray(int[][] arr){
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
//打印稀疏数组
public static void printSparseArray(int[][] arr){
for (int i=0; i<arr.length; i++){
for (int j=0; j<3; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}