-
2021-03-05 15:05:04
之前给大家介绍了java一维数组以及java二维数组,下面的话就来给大家讲一下java多维数组方面的知识。
除去一维数组和二维数组之外,Java当中还支持更多维的数组。
像三维数组、四维数组和五维数组等等它们都属于多维数组。
一般来说的话我们也将二维数组看作是多维数组,下面主要来介绍多维数组。
多维数组的声明、初始化和使用都和二维数组都是很相似的这里的话就不再具体的说了。
下面来直接来看一个示例:
假设程序当中一个名字叫做namelist的String类型三维数组,下面的话就编写代码来对它进行遍历,输出每个元素的值。
下面是具体的代码:public static void main(String[] args)
{
String[][][] namelist = {
{
{
"张阳"
, "李风"
, "陈飞"
}
, {
"乐乐"
, "飞飞"
, "小曼"
}
}
, {
{
"Jack"
, "Kimi"
}
, {
"Lucy"
, "Lily"
, "Rose"
}
}
, {
{
"徐璐璐"
, "陈海"
}
, {
"李丽丽"
, "陈海清"
}
}
};
for (int i = 0; i
{
for (int j = 0; j
{
for (int k = 0; k
{
System.out.println("namelist[" + i + "][" + j + "][" + k + "]=" + namelist[i][j][k]);
}
}
}
}
输出结果:namelist[0][0][0]=张阳
namelist[0][0][1]=李风
namelist[0][0][2]=陈飞
namelist[0][1][0]=乐乐
namelist[0][1][1]=飞飞
namelist[0][1][2]=小曼
namelist[1][0][0]=Jack
namelist[1][0][1]=Kimi
namelist[1][1][0]=Lucy
namelist[1][1][1]=Lily
namelist[1][1][2]=Rose
namelist[2][0][0]=徐璐璐
namelist[2][0][1]=陈海
namelist[2][1][0]=李丽丽
namelist[2][1][1]=陈海清
以上关于Java多维数组的一些知识你都了解了吗?更多和多维数组相关的java基础知识,请继续来本站进行了解吧。
推荐阅读:
更多相关内容 -
java多维数组
2015-09-01 10:49:52详解java多维数组,提高对java多维数组的理解 -
java多维数组排序(代码)
2020-10-05 22:37:50题目: 假定本学期某班上有5门课,该班上有10人 (1) 请输入该班同学的学号,姓名,5门课的成绩至数组A、B中,再按5门课的总分排序,然后列出排序后的序号,学号,姓名,成绩1~5; (2) 求出5门课的平均成绩 -
Java多维数组
2021-03-07 10:36:07Java多维数组教程因为在平时开发过程中,二维数组会在个别场景下面用到,但是三纬或者更多维度的数组在场景中用不到,所以我们就详细介绍一下二维数组。多维数组可以参考二维数组。二维数组定义语法数据类型 数组名...Java多维数组教程
因为在平时开发过程中,二维数组会在个别场景下面用到,但是三纬或者更多维度的数组在场景中用不到,所以我们就详细介绍一下二维数组。多维数组可以参考二维数组。
二维数组定义
语法
数据类型 数组名[][];
数组名 = new 数据类型[行的个数][列的个数];
参数
参数
描述
数据类型
和一维数组一样,每个存储空间的数据都是一样的数据类型
数组名
管理一片存储区域里面数据的总的名称
行的个数
数组中每行里面元素个数
列的个数
数组里面每列元素个数
说明
二维数组里面有了行和列的概念,在定义数组的时候,需要将行里面元素的个数和列的个数明确出来。二维数组效果图如下:
案例
Java二维数组静态赋值
package com.haicoder.net.array;
public class ArrayTest{
public static void main(String[] args){
System.out.println("嗨客网(www.haicoder.net)");
int scores[][] = {{60,61},{70,72,78},{80,99,100}}; //定义一个数组
for(int i=0;i
for(int j =0 ;j
System.out.print(scores[i][j] + "\t") ;
}
System.out.println("");
}
}
}
运行结果如下:
遍历二维数组的时候,我们可以先遍历行,然后再遍历每行上面的列。
Java二维数组动态赋值
package com.haicoder.net.array;
public class ArrayTest{
public static void main(String[] args){
System.out.println("嗨客网(www.haicoder.net)");
int scores[][] = new int[3][3]; //定义一个数组
for(int i=0;i
for(int j =0 ;j
scores[i][j] = (i + j); //动态赋值
}
}
for(int i=0;i
for(int j =0 ;j
System.out.print(scores[i][j] + "\t") ;
}
System.out.println("");
}
}
}
运行结果如下:
我们会发现,二维数组在赋值的时候,和一维数组赋值是一样的,直接给对应位置上面的数组赋值。
Java多维数组
Java 语言中,多维数组的定义和二维数组类似,也分为动态赋值和静态赋值。语句如下:
数据类型 数组名[][][];
数组名 = new 数据类型[行的个数][列的个数][列的个数];
在定义和初始化的时候,数组名后面的[] 数量要和初始化的时候的数量一致,有几个 [] 表示几维数组。
Java多维数组总结
无论是多维数组,还是一维数组,Java 中数组的遍历读取和赋值都是一样的,都需要获取到数组的位置,然后对相应位置上面的元素赋值。
-
java 多维数组
2021-08-29 15:30:101. 多维数组概述 数组:它是一个线性数据结构,用于存储一组相同数据类型的数据(长度一经定义不可变)。 需求:存储 1 个班的 5 名同学的成绩。 double[] scores = new double[5]; scores[0] = 90; // .... ...1. 多维数组概述
数组:它是一个线性数据结构,用于存储一组相同数据类型的数据(长度一经定义不可变)。
需求:存储 1 个班的 5 名同学的成绩。
double[] scores = new double[5]; scores[0] = 90; // ....
需求进阶:存储 3 个班的各 5 名同学的成绩。
double[] scores1 = new double[5]; double[] scores2 = new double[5]; double[] scores3 = new double[5]; // ...
多维数组:可以理解为是一种嵌套的数组。
常见形式为:二维数组 、三维数组 ...
二维数组: 是以 一维数组 作为 数组元素 的数组,即 “数组的数组”。
2. 多维数组定义
一维数组的语法:
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数]; 数组元素的数据类型[] 数组名 = {元素值1, 元素值2, ...}; 数组元素的数据类型[] 数组名 = new 数组元素的数据类型[] {元素值1, 元素值2, ...}; // 例如:存储 5 名同学成绩 double[] scores = new double[5]; double[] scores = {90, 80, 70, 60, 50}; double[] scores = new double[] {90, 80, 70, 60, 50}; // 赋值语法 数组名[下标] = 元素值; // 例如:存储第 1 名同学的成绩 scores[0] = 90;
从内存分配原理的角度上来看,它们都是一维数组而已,是以 一维数组 作为 数组元素 的数组,即 “数组的数组”。
二维数组的语法:
-
二维数组中存储的是一个一维数组,所以就把一维数组这个类型作为二维数组的数组元素的数
据类型即可。
数组元素的数据类型[] 数组名 = new 数组元素的数据类型[数组的容量/长度/元素个数]; 数组元素的数据类型[] 数组名 = {元素值1, 元素值2, ...}; 数组元素的数据类型[] 数组名 = new 数组元素的数据类型[] {元素值1, 元素值2, ...}; // 例如:存储 3 个班各 5 名同学成绩 double[][] scores = new double[3][5]; double[][] scores = {{90, 80, 70, 60, 50}, {...}, {...}}; double[][] scores = new double[][] {{90, 80, 70, 60, 50}, {...}, {...}}; // 赋值语法 数组名[外维数组下标][内维数组下标] = 元素值; // 例如:给第 1 个班存储第 1 名同学的成绩 scores[0][0] = 90;
注意:在定义二维数组时,可以省略内维数组容量。
例如:
double[][] scores = new double[3][]; scores[0] = new double[5]; scores[1] = new double[2]; scores[2] = new double[3];
相比于直接在定义时指定好内维数组容量,这种方式更为灵活,内维数组可以指定不同的数组容量。
3. 多维数组的遍历
使用单重循环解决了一维数组的遍历。
使用多重循环解决多维数组的遍历。
// 存储 3 个班各 5 名同学成绩 double[][] scores = new double[3][5]; Scanner input = new Scanner(System.in); for (int i = 0; i < scores.length; i++) { System.out.printf("请输入第%d个班的同学成绩:\n", i+1); for (int j = 0; j < scores[i].length; j++) { System.out.printf("请输入%d班的第%d名同学成绩:", i+1, j+1); scores[i][j] = input.nextDouble(); } } System.out.println(); // 遍历 for (int i = 0; i < scores.length; i++) { System.out.printf("第%d个班的同学成绩列表如下:\n", i+1); for (int j = 0; j < scores[i].length; j++) { System.out.println(scores[i][j]); } }
4. 多维数组的使用
参照上课代码
5. 算法概述
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量 。
食谱就是一个算法,我们就此有了“算法”概念的初步定义:一个算法是解决一个问题的进程。
6. 排序算法
所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,不允许混淆不清。
排序算法也有很多种解决思路,常见的有:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序、基数排序等。
6.1 冒泡排序
它重复地走访过要排序的元素列,依次比较两个相邻的元素 ,如果顺序 (如从大到小、首字母从Z到A)错误就把他们交换过来 。(相邻元素做比较,两两比较小靠前)
例如:9, 7, 8, 6, 2,做好升序排序。
冒泡排序:外层循环 n-1,内层循环 n-1-i
6.2 选择排序
类似于打擂台求最小值的思路。
6.3 插入排序
类似于在一个已有序列中,去比较、插入新数据,并保持现有序列。
7. 引用数据类型
Java 中有 8 个【基本】数据类型:
数值:
-
整数:byte、short、int、long
-
浮点数:float、double
非数值:
-
char
-
boolean
引用数据类型:
-
数组
-
类(String是一个类,....)
-
接口
-
枚举
-
-
Java 多维数组遍历详解
2021-03-08 09:41:31数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组:public class ArrayDemo {private int arraySize=10;...数组是Java中的一种容器对象,它拥有多个单一类型的值。当数组被创建的时候数组长度就已经确定了。在创建之后,其长度是固定的。下面是一个长度为10的数组:
public class ArrayDemo {
private int arraySize=10;
public int[] arrayOfIntegers = new int[arraySize];
}
上面的代码是一维数组的例子。换句话说,数组长度只能在一个方向上增长。很多时候我们需要数组在多个维度上增长。这种数组我们称之为多维数组。为简单起见,我们将它称为2维数组。当我们需要一个矩阵或者X-Y坐标系的时候,二维数组是非常有用的。下面就是一个二维数组的例子:
public class TheProblemOf2DArray {
private static final int ARR_SIZE=10;
public static void main(String[] args) {
int arr[][]=new int[ARR_SIZE][ARR_SIZE];
}
}
想象一下,一个二维数组看起来就像一个X-Y坐标系的矩阵。
然而,可能让Java开发者们感到惊讶的是,Java实际上并没有二维数组。
在一个真正的数组中,所有的元素在内存中都存放在连续的内存块中,但是在Java的二维数组并不是这样。Java中所有一维数组中的元素占据了相邻的内存位置,因此是一个真正的数组。
在Java中,当我们定义:
int singleElement // 表示一个int变量
int[] singleDArray // 表示一个int变量数组(一维)
int[][] twoDArray // 表示一个int变量数组的数组(二维)
这意味着,在上面的例子中,二维数组是一个数组的引用,其每一个元素都是另一个int数组的引用。
这张图片清楚地解释了这个概念。
由于二维数组分散在存储器中,所以对性能有一些影响。为了分析这种差异,我写了一个简单的Java程序,显示遍历顺序的重要性。
package arrayTraverse;
/**
* 二维数组的问题
*
* 我们在初始化一个任意大小的2维数组。(为简化分析我们使用二维方阵)我们将用两种不同方式迭代同一个数组,分析结果
* 两种迭代方式的性能差距很大
* @author mohit
*
*/
public class TheProblemOf2DArray {
//数组大小:数组越大,性能差距越明显
private static final int ARR_SIZE=9999;
public static void main(String[] args) {
//新数组
int arr[][]=new int[ARR_SIZE][ARR_SIZE];
long currTime=System.currentTimeMillis();
colMajor(arr);
System.out.println("Total time in colMajor : "+(System.currentTimeMillis()-currTime)+" ms");
//新数组,与arr完全相同
int arr1[][]=new int[ARR_SIZE][ARR_SIZE];
currTime=System.currentTimeMillis();
rowMajor(arr1); // this is the only difference in above
System.out.println("Total time in col : "+(System.currentTimeMillis()-currTime) +" ms");
}
/**
* 下面的代码按列优先遍历数组
* 即在扫描下一列之前先扫描完本列
*
*/
private static void colMajor(int arr[][]) {
for(int i=0;i
for (int j=0;j
//See this, we are traversing j first and then i
arr[i][j]=i+j;
}
}
}
/**
* 如果我们转换内外循环
* 程序就以行优先顺序遍历数组
* 即在扫描下一行之前先扫描完本行
* 这意味着我们访问数组时每次都在访问不同的列(因此也在访问不同的页)
* 代码微小的改变将导致这个程序花费更多的时间完成遍历
*/
private static void rowMajor(int arr[][]) {
for(int i=0;i
for (int j=0;j
/*看这个,我们先遍历j,然后遍历i,但是对于访问元素来说
* 它们在更远的位置,所以需要花费的更多
*/
arr[j][i]=i+j;
}
}
}
}
下面是示例的结果:
重复上面的例子,它会始终给出类似的结果,不过时间差可能会有所不同。
-
Java 多维数组 三维数组 初始化 赋值 打印
2021-10-13 16:18:16import java.util.Arrays; public class Test { public static void main(String[] args) { int[][][] arr = new int[2][][]; arr[0] = new int[3][3]; arr[1] = new int[][]{new int[]{1, 2}, new int[]{3... -
java多维数组详解
2020-11-12 18:52:41在java中其实没有多维数组的概念,只不过是依据数组的概念以及特点技术上的延伸 本质上就是存储数组的数组 多维的数组的使用 ①声明 // ### ①声明 // 1)数据类型 [][] 数组名; // 创建一个存储整数类型数组 ... -
Java多维数组转一维输出
2021-11-09 17:55:25多维数组转一维,感谢提问的老师(达者为师),长时间不写了竟然一时没想到方法,思考了下,做个记录。 package com.test; import java.lang.reflect.Array; import org.testng.annotations.Test; public class... -
java 多维数组的遍历
2021-03-28 15:31:03java 多维数组的遍历 public static void main(String[] args) { int[][] a ={{1,2},{3,4},{5,6},{7,8}}; //多维数组的遍历 for (int i = 0; i <a.length ; i++) { for (int j = 0; j < a[i].length ; j... -
Java多维数组分别进行行排列
2020-11-25 14:53:03Java多维数组分别进行行排列 一维数组的行排列 在进行一维数组排列时,只需要使用Arrays.sort()方法即可。 int[] a=new int[15,10,20,35,41]; Arrays.sort(a); 代码结果为: 10,15,20,35,41 二维数组的行排列 int... -
JAVA多维数组的打印
2021-01-08 13:38:00*多维数组的打印 */ import java.util.Arrays; import java.util.Random; public class PersonDemo { public static void main(String[] args) { Random ran=new Random(); int [][][]arr= {{{1,2,3,6,5,8}... -
Java多维数组的使用
2020-11-24 17:26:08多维数组的理解 初始化方式 public class test { public static void main(String[] args){ //静态初始化 int[][] arr = new int[][]{{1, 2, 3}, {4, 5}, {7, 8}}; //动态初始化1 int[][] arr1 = new int[3][2... -
JAVA学习17-java多维数组的创建及使用
2020-08-15 11:01:06多维数组 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。 二维数组: int a[][]=new int[2][5]; 多维数组的使用: public class ArrayDemo05 { public ... -
Java多维数组声明格式
2019-04-20 22:49:42关于多维数组声明的形式你知道哪几种呢? 首先先上一个错误的例子: 这里arr9 - arr11在等式右边都错误的在中括号中加了数组大小,导致报错; 而arr11、arr12则是等式右边二维数组初始化时没有赋予初始大小导致报错... -
Java 多维数组是由一维数组组合而成,这种说法是否正确?
2021-04-17 09:47:26Java 多维数组是由一维数组组合而成,这种说法是否正确?Java 多维数组是由一维数组组合而成,这种说法是否正确?明天Java考试了 有没有大神帮帮忙呢一、选择题1.对象的静态特征在类中表示为变量,称为类的(B)A.... -
Java多维数组和Arrays类方法总结详解
2020-08-19 12:04:57主要介绍了Java多维数组和Arrays类方法总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
Java多维数组length
2018-05-24 17:11:36多维数组的length属性与一维数组不同。 一维数组表示数组的长度。 而多维数组,例如在二维数组中: 数组名.length指示数组的行数。 数组名[行下标] .length指示该行中的元素个数。 依此类推。... -
[解决方案]java多维数组按照某几列进行排序
2018-10-23 16:13:03有一个二维数组,我想按照第一,第二,第三列进行降序排列。 注意: 1、如果第一列数值相同,那么就按照第二列降序排列。 2、同理,如果第二列数值相同,那么就按照第三列降序排列。 代码如下: import ... -
Java多维数组初始化的问题
2019-01-11 09:31:47昨天遇到了三维数组初始化的问题,代码如下, int[][][] arr = new int[2][][]; arr[1] = new int[][]{{1,...这里只是找到了一个可以编译的写法,盲人摸象,想要高屋建瓴的理解还是去了解Java编译器和虚拟机。 i...