多维数组以及拷贝,可变参数
多维数组
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.调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
多维数组以及拷贝,可变参数相关推荐
- C++笔记 二维数组作为函数的参数详解 三种传参的方法总结 注意要点总结
文章目录 1.C/C++ 二维数组作为函数的参数 2.不合法写法总结 3.测试案例 3.1 传参方式1 3.2 传参方式2 3.3 传参方式3 4.运行结果 5.总结 1.C/C++ 二维数组作为函数 ...
- 二维数组作为函数的参数和返回值
1. 二维数组作为函数的参数 (1)错误的做法:将二维数组传递给二维指针 //实参是二维数组,形参是int**,这样做的话编译器会报错 int main() {int arr[3][4] = { 1 ...
- C语言-二维数组做函数的参数
文章目录 1 引例 2 观点1 这种使用方法是错误的 3 观点2 根本不需要这么做 4 二维数组做函数参数的方法 4.1 方法1 4.2 方法2 4.3 方法3 5 与Java的不同 1 引例 下面的 ...
- Java数组学习笔记(遍历、排序、多维数组、命令行参数)
文章目录 数组的遍历和快速打印 冒泡排序和快速排序 数组和字符串排序的区别 多维数组建立和输出 命令行向main()传递参数 数组的遍历和快速打印 一.数组的遍历 数组的遍历有两种方法,一种是使用fo ...
- 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )
文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...
- day02--java基础编程:变量,数据类型,类型转换,运算规则,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序
1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...
- day02--java基础编程:变量,数据类型,类型转换,运算规则,Scanner,运算符,分支结构,循环(随机数),方法,重载,可变参数,递归,数组,冒泡排序
1 Day02–变量+数据类型+类型转换 1.1 前言 1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括包名.类名.方法.字段.变量等.我们选择的名称就称为 ...
- 【 C 】作为函数参数的多维数组
我们都知道一维数组作为函数参数的情况,作为函数参数的一维数组名--实际传递的是指向数组第一个元素的指针. 多维数组名作为函数参数的传递方式和一维数组名相同--实际传递的也是指向第一个元素的指针. 但是 ...
- 返回多个不同类型参数的值(out)可变参数一维数组( params )把值从方法中带出(ref) 方法递归(方法自己调用自己与循坏类似注意return每次只能跳出一个方法))...
//out参数 如果需要在方法中,返回多个值,并且是不同类型,可以使用out参数帮助我们返回. out参数就是帮助我们在方法中返回多个不同类型的值. out参数必须在方法的内部为其赋值,而在方法 ...
最新文章
- UUID的使用及其原理
- matlab GUI和simulink参数传递
- 快速求平方根,这个好牛逼
- SAP Hybris recipe 为 cx 的安装和初始化
- 欢乐纪中某B组赛【2019.1.30】The penultimate day
- ajax怎么发送数据给php,ajax怎么发送数据给php
- Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘
- 【Linux】linux命令iostat
- [转载] python创建集合set()_python 之集合{}(Set)
- 基础集群部署 - kubernetes-simple
- Mysql中修改字段类型、长度以及添加删除列
- DCMTK各模块说明
- 炫酷动漫游戏网站页面设计html页面前端源码
- 利用python判断素数
- 个人必备google搜索技巧
- 抽象代数之循环群的自同构群是循环群
- Android分享wifi给电脑,安卓手机怎么通过USB共享网络给mac电脑
- UESTC 1593 老司机破阵 优先队列+双端链表
- RAR压缩包,去除密码?
- 学网络安全需要什么基础?