上一篇关于字符串提取最大相同部分的博文中有用到二维数组来存储相关内容
本篇咱们就来小论一下数组结构。
首先便是一维数组,一维数组本身并没有太多花里胡哨的东西,比如 int[ ] array=new int[3],这便只是简单创建了一个三个长度的数组。
其次便是二维数组,二维数组是在一维数组的基础之上建立的,比如int[ ] array=new int[3][4];这便是在一维的基础上将一维数组存储的对象变成了一个个小数组,这些小数组里面再添加一个个对象。所以可以这么理解二维数组的参数:第一个参数3表示在array数组内含有3个小数组,第二个参数4表示每个小数组又包含4个长度的存储空间。所以二维数组的长度可不能用array.length来取,否则取到的值不过是这个数组包含几个小数组而已。
同理,三维数组和二维数组一样,不过是基于二维数组,将原来存储的值变成了小数组,比如 int[ ][ ][ ] array=new array[3][3][4],你可以理解为在一维数组下有3个小数组,而这三个小数组又分别包含3个小数组,这三个小数组又分别包含4个长度的存储空间。
同上,四维便是在三维的基础上将原有的存储空间再细分为小数组,比如 int[ ][ ][ ][ ]=new int[2][2][3][4],你可以理解为在一维数组下有2个小数组,这两个小数组又分别包含2个小数组,被包含的两个小数组里面分别还有3个小数组,这被包含两层的三小数组里面分别包含4个长度的存储空间。以此类推,五维、六维、七维......n维都是如此,不过是以上一个维度为基础,开辟一个个存储空间(当然似乎没有四维、五维、六维......n维,只是我这么叫着哈,统称其为多维吧)
当然也可以换一种方式来理解,
比如一维int[ ]=new int[3],便是上无老下,无小的三兄弟,血缘关系处于同一层次,为一世同堂。
二维int[ ][ ]=new int[3][3],便是这三兄弟膝下各有三子,为两世同堂。
三维int[ ][ ][ ]=new int[3][3][2],便是这三兄弟的三个儿子分别再诞下两子,为三世同堂。
四维int[ ][ ][ ][ ]=new int[3][3][2][1],这便是为限制人口,提出了的计划生育,所以这三兄弟的孙子们每人只能拥有一个孩子,为四世同堂。
五维int[ ][ ][ ][ ][ ]=new int[3][3][2][1][2],这便是为防止国家老龄化,全面开放二孩,所以这三兄弟的曾孙们每个人又能拥有两个孩子,为五世同堂。
以上便是鄙人对于数组结构的一点薄见,各位看官若觉得我的理解有误或有更深层次的理解,烦请评论让余悉知一二,不胜感激!
以下为鄙人为验证以上说法的一点小小拙见,各位看官有兴趣可尝试运行以下代码:
package demo;
/**
*
* @author 唐斌
* @Date 2019-11-6
* @Content 小论数组(一维、二维、多维)
*
*/
public class DemoArray {
public static void main(String[] args) {
int a=4;
int b=4;
int c=4;
int d=4;
String[] array1=new String[a];
String[][] array2=new String[a][b];
String[][][] array3=new String[a][b][c];
String[][][][] array4=new String[a][b][c][d];
for (int i = 0; i < a; i++) {
int x1=i;
array1[i]=x1+"";
for (int j = 0; j < b; j++) {
int x2=i;
int y2=j;
array2[i][j]=x2+","+y2;
for (int k = 0; k < c; k++) {
int x3=i;
int y3=j;
int z3=k;
array3[i][j][k]=x3+","+y3+","+z3;
for (int l = 0; l < d; l++) {
int x4=i;
int y4=j;
int z4=k;
int m4=l;
array4[i][j][k][l]=x4+","+y4+","+z4+","+m4;
}
}
}
}
int len1=0;
int len2=0;
int len3=0;
int len4=0;
len1=array1.length;
for (int i = 0; i < a; i++) {
len2+=array2[i].length;
//System.out.print(array1[i]+" "); //一维数组输出
for (int j = 0; j < b; j++) {
len3+=array3[j].length;
//System.out.print(array2[i][j]+" "); //二维数组输出
for (int k = 0; k < c; k++) {
len4+=array4[k].length;
//System.out.print(array3[i][j][k]+" "); //三维数组输出
for (int l = 0; l < d; l++) {
System.out.print(array4[i][j][k][l]+" "); //四维数组输出
}
System.out.println();
}
//System.out.println();
}
//System.out.println();
}
System.out.println("\n一维数组的长度"+len1);
System.out.println("二维数组的长度"+len2);
System.out.println("三维数组的长度"+len3);
System.out.println("四维数组的长度"+len4);
}
}