多维数组

java 支持两种数据类型的多维数组。

第一种是矩形数组,也称等长数组。在二维矩形数组中,每一行有相同的列数。例:int[][] A = new int[4][2];

第二种多维数组是交错数组,即所谓的正交数组、变长数组、锯齿形数组。在二维交错数组中,每一行可以有不同的列数。

在多维数组中,比较常用的是二维数组。多维数组的声明、实例化和初始化与一维数组的声明、实例化和初始化相类似。声明多维数组时,用[]对表示维数。两个[]对表示二维数组,3个[]对表示三维数组,以此类推。

基本数据类型的数组未初始化的值均为 0 , 对象数组 :初始化为null , Boolean:初始化默认为false,字符串:/u0000。

  • 举例:
package com.k;
import java.util.Arrays;
public class Yichang {public static void  main(String[] args){int[][] array = {{1, 2, 3},{4, 5, 6}};int[][] brray = new int[2][3];int[][] arr1 = new int[2][3]; //声明并创建一个二维整型数组(2行3列)int[][] arr2 = {{1,2,3},{4,5,6}}; //声明并初始化一个二维整型数组(2行3列,6个元素)int[][] arr3 = new int[][]{{1,2,3},{4,5,6}}; //声明创建并初始化int[][] arr4 = new int[3][];arr4[0] = new int[2];arr4[1] = new int[4];arr4[2] = new int[5];     // 不规则数组System.out.println(Arrays.deepToString(brray));System.out.println(Arrays.deepToString(arr1));System.out.println(Arrays.deepToString(arr2));System.out.println(Arrays.deepToString(arr3));System.out.println(Arrays.deepToString(arr4));}
}
[[0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0]]
[[1, 2, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
[[0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0]]

二维数组的拷贝

 二维数组的拷贝和一维数组的拷贝类似,同样有四种,分别是for循环拷贝,Object.clone(),System.arraycopy(),Arrays.copyOf() 四种拷贝方法。下面是代码示例:

  • for循环拷贝(浅拷贝)
package com.k;
import java.util.Arrays;
public class Yichang {public static void  main(String[] args){int[][] array = {{1, 2, 3},{4, 5, 6}};int[][] brray = new int[2][3];for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {brray[i][j] = array[i][j];}}System.out.println(Arrays.deepToString(brray));}
}
[[1, 2, 3], [4, 5, 6]]
class TestArray2 {private int val;public void setVal(int val) {this.val = val;}public int getVal() {return this.val;}
}public class Yichang {public static void main(String[] args) {TestArray2[][] testArray2 = new TestArray2[2][2];testArray2[0][0] = new TestArray2();testArray2[0][1] = new TestArray2();testArray2[1][0] = new TestArray2();testArray2[1][1] = new TestArray2();TestArray2[][] testArray3 = new TestArray2[2][2];for (int i = 0; i < testArray2.length; i++) {for (int j = 0; j < testArray2.length; j++) {testArray3[i][j] = testArray2[i][j];}}System.out.println("拷贝完成");for (int i = 0; i < testArray2.length; i++) {for (int j = 0; j < testArray2.length; j++) {System.out.print(testArray2[i][j].getVal() + " ");}}System.out.println();for (int i = 0; i < testArray3.length; i++) {for (int j = 0; j < testArray3.length; j++) {System.out.print(testArray3[i][j].getVal() + " ");}}System.out.println();testArray2[0][0].setVal(100);System.out.println("修改完成");for (int i = 0; i < testArray2.length; i++) {for (int j = 0; j < testArray2[i].length; j++) {System.out.print(testArray2[i][j].getVal()+" ");}}System.out.println();for (int i = 0; i < testArray3.length; i++) {for (int j = 0; j < testArray3[i].length; j++) {System.out.print(testArray3[i][j].getVal()+" ");}}System.out.println();}}
拷贝完成
0 0 0 0
0 0 0 0
修改完成
100 0 0 0
100 0 0 0
  • ** Arrays.deepToString() 方法是多维数组以字符串形式输出。**
  • Object.clone()
class TestArray2 {private int val;public void setVal(int val) {this.val = val;}public int getVal() {return this.val;}
}public class Yichang {public static void main(String[] args) {TestArray2[][] testArray2 = new TestArray2[2][2];testArray2[0][0] = new TestArray2();testArray2[0][1] = new TestArray2();testArray2[1][0] = new TestArray2();testArray2[1][1] = new TestArray2();TestArray2[][] testArray3 = new TestArray2[2][2];for (int i = 0; i < testArray2.length; i++) {for (int j = 0; j < testArray2.length; j++) {testArray3[i] = testArray2[i].clone();}}System.out.println("拷贝完成");for (int i = 0; i < testArray2.length; i++) {for (int j = 0; j < testArray2.length; j++) {System.out.print(testArray2[i][j].getVal() + " ");}}System.out.println();for (int i = 0; i < testArray3.length; i++) {for (int j = 0; j < testArray3.length; j++) {System.out.print(testArray3[i][j].getVal() + " ");}}System.out.println();testArray2[0][0].setVal(100);System.out.println("修改完成");for (int i = 0; i < testArray2.length; i++) {for (int j = 0; j < testArray2[i].length; j++) {System.out.print(testArray2[i][j].getVal()+" ");}}System.out.println();for (int i = 0; i < testArray3.length; i++) {for (int j = 0; j < testArray3[i].length; j++) {System.out.print(testArray3[i][j].getVal()+" ");}}System.out.println();}}
拷贝完成
0 0 0 0
0 0 0 0
修改完成
100 0 0 0
100 0 0 0
  • System.arraycopy():
 for (int i = 0; i < testArray2.length; i++) {System.arraycopy(testArray2[i], 0, testArray3[i], 0, testArray2[i].length);}
  • Arrays.copyOf():
 for (int i = 0; i < testArray2.length; i++) {testArray3[i] = Arrays.copyOf(testArray2[i], testArray2[i].length);}

匿名数组

 使用数组时,一般需要先声明数组变量,然后创建并初始化一个数组并赋值给声明的数组变量。Java语言也支持匿名数组,即在需要数组变量的地方,直接通过下列形式创建一个匿名数组。

  • new 数组类型[] {初始值设定项}; //创建一个一维匿名数组
  • new 数组类型[][] {初始值设定项};//创建一个二维匿名数组

可变参数

 Java可变参数,适用于参数个数不确定,类型确定的情况,Java把可变参数当做数组处理。

可变参数使用时需要注意:

1.只能出现在参数列表的最后;

2.“…”位于变量类型和变量名之间,前后有无空格都可以;

3.调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

多维数组以及拷贝,可变参数相关推荐

  1. C++笔记 二维数组作为函数的参数详解 三种传参的方法总结 注意要点总结

    文章目录 1.C/C++ 二维数组作为函数的参数 2.不合法写法总结 3.测试案例 3.1 传参方式1 3.2 传参方式2 3.3 传参方式3 4.运行结果 5.总结 1.C/C++ 二维数组作为函数 ...

  2. 二维数组作为函数的参数和返回值

    1. 二维数组作为函数的参数  (1)错误的做法:将二维数组传递给二维指针 //实参是二维数组,形参是int**,这样做的话编译器会报错 int main() {int arr[3][4] = { 1 ...

  3. C语言-二维数组做函数的参数

    文章目录 1 引例 2 观点1 这种使用方法是错误的 3 观点2 根本不需要这么做 4 二维数组做函数参数的方法 4.1 方法1 4.2 方法2 4.3 方法3 5 与Java的不同 1 引例 下面的 ...

  4. Java数组学习笔记(遍历、排序、多维数组、命令行参数)

    文章目录 数组的遍历和快速打印 冒泡排序和快速排序 数组和字符串排序的区别 多维数组建立和输出 命令行向main()传递参数 数组的遍历和快速打印 一.数组的遍历 数组的遍历有两种方法,一种是使用fo ...

  5. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  6. day02--java基础编程:变量,数据类型,类型转换,运算规则,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

    1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...

  7. day02--java基础编程:变量,数据类型,类型转换,运算规则,Scanner,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序

    1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...

  8. 【 C 】作为函数参数的多维数组

    我们都知道一维数组作为函数参数的情况,作为函数参数的一维数组名--实际传递的是指向数组第一个元素的指针. 多维数组名作为函数参数的传递方式和一维数组名相同--实际传递的也是指向第一个元素的指针. 但是 ...

  9. 返回多个不同类型参数的值(out)可变参数一维数组( params )把值从方法中带出(ref) 方法递归(方法自己调用自己与循坏类似注意return每次只能跳出一个方法))...

    //out参数  如果需要在方法中,返回多个值,并且是不同类型,可以使用out参数帮助我们返回.  out参数就是帮助我们在方法中返回多个不同类型的值.  out参数必须在方法的内部为其赋值,而在方法 ...

最新文章

  1. UUID的使用及其原理
  2. matlab GUI和simulink参数传递
  3. 快速求平方根,这个好牛逼
  4. SAP Hybris recipe 为 cx 的安装和初始化
  5. 欢乐纪中某B组赛【2019.1.30】The penultimate day
  6. ajax怎么发送数据给php,ajax怎么发送数据给php
  7. Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘
  8. 【Linux】linux命令iostat
  9. [转载] python创建集合set()_python 之集合{}(Set)
  10. 基础集群部署 - kubernetes-simple
  11. Mysql中修改字段类型、长度以及添加删除列
  12. DCMTK各模块说明
  13. 炫酷动漫游戏网站页面设计html页面前端源码
  14. 利用python判断素数
  15. 个人必备google搜索技巧
  16. 抽象代数之循环群的自同构群是循环群
  17. Android分享wifi给电脑,安卓手机怎么通过USB共享网络给mac电脑
  18. UESTC 1593 老司机破阵 优先队列+双端链表
  19. RAR压缩包,去除密码?
  20. 学网络安全需要什么基础?

热门文章

  1. 撮合引擎开发:解密黑箱流程
  2. mac下安装Homebrew教程 碰壁的最终归宿
  3. GNN-CS224W: 17 Scaling Up GNNs
  4. UNet - unet网络
  5. Solidity语言学习笔记————20、函数修饰符
  6. 02@Docker网络介绍及网络模式的使用
  7. HTMLinput标签Date默认值修改为当前时间
  8. eclipse误点 project facets导致项目结构发生变化,并且报错,如果恢复project facets
  9. Table固定表头固定左侧列
  10. cloudflare解析域名+CDN(以阿里云为例)+宝塔