多维数组java
A. java 多维数组
public class TestArray {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] matrix = new int[5][];
for(int i = 0; i < 5; i ++) {
matrix[i] = new int[i];
System.out.print("matrix[" + i + "]is<");
for(int j = 0; j < i; j++) {
matrix[i][j] = i * j;
System.out.print(matrix[i][j]);
if(i - j > 1) {
System.out.print(",");
}
}
System.out.println(">");
}
}
}
顺便说说,二楼的少了个逗号 (*^__^*)
B. java多维数组怎么复制
网上有这样的一个例子
程序如下:
class C{
public static void main(String args[]){
int a[][] = {{1,2,3},{4,5,6}};
int b[][] = new int[a.length][a[0].length];
System.array(a,0,b,0,a.length); //通过array()函数拷贝数组
b[0][0] = 4; //改变数组b[0][0]的值
System.out.println("a[][]");
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
System.out.println("b[][]");
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
打印的结果如下:
a[][]
4 2 3
4 5 6
b[][]
4 2 3
4 5 6
而如果把上述程序中的二维数组改为一维数组,结果却不同。程序如下:
class C{
public static void main(String args[]){
int a[] = {1,2,3};
int b[] = new int[a.length];
System.array(a,0,b,0,a.length); //通过array()函数拷贝数组
b[0] = 4; //改变数组b[0]的值
System.out.println("a[]:");
for(int i=0;i<3;i++){
System.out.print(a[i] + " ");
}
System.out.println();
System.out.println("b[]:");
for(int i=0;i<3;i++){
System.out.print(b[i] + " ");
}
}
}
打印结果如下:
a[]:
1 2 3
b[]:
4 2 3
在第一个程序中,用b[0][0] = 4;只改变了数组b[0][0]的值,可是结果却是数组a[0][0]的值也发生了改变。而在第二个程序中,由于是一个一维数组,改变了b[0]的 值,a[0]的值却并没有受到影响,所以问题可能就出在数组的维数上。第一个程序中的a 是一个数组的数组(java 中没有多维数组的概念,只有数组的数组),同理b 也是,那么a 含有两个元素,第一个是指向(1,2,3) 这个数组的引用,第二个是指向(4,5,6)这个数组的引用,而arrayCopy 就是负责把数组的内容 过去的,因此 a 的内容 (2 个引用) 被 到b 中去了,因此你对b[0][0] 做修改,a 也会同样跟着变化.
在JAVA里面,可以用复制语句“A=B”给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变。
JAVA中复制数组元素值的的方法指深拷贝
1 使用for循环,将数组的每个元素复制(需要将每个对象调用clone方法,才能实现真正的复制)
2 使用clone方法,得到数组的值,而不是引用
3 使用System.array方法
注意:
1.上面方法中array效率较高。
2. 以上所说的拷贝数组的方法,只是针对一维数组,对于多维数组,要在每一维用以上方法进行复制才能实现复制数组元素的值而不是引用。
3. clone 和 array对二维数组进行复制时,是浅拷贝, 即
Object[][] aa;
Object[][] bb = aa.clone();
//or bb=System.array(aa,0,bb, 0, bb.length);
则:
boolean b1 = ( aa[i] == bb[i] ); //false
boolean b2 = (aa[i][j] == bb[i][j]); //true, 可见数组元素只复制了引用。新旧数组指向相同的内存地址,(不论对象数组,还是基本类型数组)。
/**
* 数组的浅拷贝是指数组拷贝时,只拷贝了数组的地址,新旧数组指向同一数据
* 数组的深拷贝,不论数据是基本类型,还是对象类型,都是一样的。
* 对数组来说,不一样的地方在于,当为数组元素赋值时,基本类型值传递,对象类型是引用传递。
*
*/
Object[] a = new Object[]{"String", new Integer(1)};
Object[] b = a;
/**
* 数组深拷贝的方法有如下几种:
* 1。 调用clone
* 2。 调用System.array
* 以上两种对基
C. java8中如何动态遍历动态多维数组
有两种实现方法:
可以用List数组来实现
可以用map来实现
方法一:用map来实现
比如要创建一个1行、3列的数组,实现方法如下:
public static void main(String[] args) throws CloneNotSupportedException { Map<Double, List<Double>> myMap = create(1, 3);}public static Map<Double, List<Double>> create(double row, double column) { Map<Double, List<Double>> doubleMap = new HashMap<Double, List<Double>>(); for (double x = 0; x < row; x++) { for (double y = 0; y < column; y++) { doubleMap.put(x, new ArrayList<Double>()); } } return doubleMap;}
方法二:
可以用List数组来实现
publicstaticvoidmain(Stringargs[]){
//list作为动态二维数组
List<List<String>>list=newArrayList();
List<String>a1=newArrayList<String>();
List<String>a2=newArrayList<String>();
List<String>a3=newArrayList<String>();
list.add(a1);
list.add(a2);
list.add(a3);
a1.add("string1ina1");
a1.add("string2ina1");
a2.add("string1ina2");
a3.add("string1ina3");
a3.add("string2ina3");
for(inti=0;i<list.size();++i){
for(intj=0;j<list.get(i).size();++j)
System.out.println(list.get(i).get(j));
}
}
D. java支持多维数组吗最多支持多少
Java中没有
多维数组
的概念,所以也就没有可以支持多少这个说法!
但是Java是可以实现多维数组的功能!
具体数量没有限制!
Java
实现多维数组的原理,其实很简单!简单到只把数组里的数组看成一个对象而已!
一个数组集合你想放多少对象都可以,如果你不关心会性能的话!
E. 关于java中多维数组的问题
不对的,对于已声明的数组来说,它的名字代表的是该数组的首地址,不能那样赋值的。
直接写成:int a[][] = {{1,2,3},{4,5,6}}; 就好了。
F. JAVA的多维数组的实质是什么
C语言中无论几维数组都是按行连续存放的...JAVA作为面向对象的语言.在new一个数组时..会在常量池或堆中生成一个对象..数组中存放的只是该对象的引用..指向对象的首地址 一维数组里存放的是第二维数组里引用的引用...以此类推 因为JAVA的内存管理机制所以我们一般不关心它的存储问题 具体的分布方式我也不知道 即使是哈希码也只是表示在JVM中的虚拟地址 不是物理地址 但是据说也是连续的 希望有帮助
G. java多维数组
int sum=0;
for(int i = 0; i<a[0].length; i){
sum = sum + a[0][i];
}
System.out.println(sum);
多维数组,其实就是多个一维数组结合起来的,数组里面套数组,把一、二维数组弄明白,其他就简单了
H. java中如何定义多维数组
下面介绍一下ArrayList作为Java动态数组的用法。
1.语法:add()是添加一个新的元素,remove()删除一个元素,size()获得ArrayList的长度。ArrayList的下标是从0开始。
2.示例代码package wang48.jiaocheng;
import java.util.ArrayList;
public class JavaArrayList{public static void main(String[]args){//Java动态数组的初始化
ArrayList al=new ArrayList();
//向Java动态数组中添加数据al.add(a);al.add(b);al.add(c);//输出Java动态数组
for(int i=0;i<al.size();i++){String alEach=(String)al.get(i);
System.out.println(alEach);}//删除数组中的某个元素,删除第二个元素
al.remove(1);
//修改Java动态数组,把新的元素放到第二个位置
al.add(1,2);////输出Java动态数组
I. java怎么理解多维数组
3维数组还是很容易理解的
先讲2维数组,很直接的就能联想到一个平面结构的行、列
变成3维后 就成了一个立方体结构,如同常见的玩具魔方一样,相对于2维,就多了一个层的概念
int SanWei[][][]={{{5,2,3},{4,5,6}},{{87,7,5},{10,11,12}}};
第一层int SanWei[0][*][*] 是一个二维数组如下
int SanWei[0][0][*] :{5,2,3}
int SanWei[0][1][*] :{4,5,6}
第二层int SanWei[1][*][*] 是一个二维数组如下
int SanWei[1][0][*] :{87,7,5}
int SanWei[1][1][*] :{10,11,12}
用简单的平面、和立方体来形容会比较容易理解,画图太麻烦了,你自己手绘一下就行
2、3维比较容易理解,4维 可以借用3维立方体来理解,魔方的每一块 都是一个小的魔方,再高维的话,我的想象力不够用了。转载,仅供参考。
J. java 的多维数组的应用
您好,提问者:
比如省份、县,这就可以用到二维数据。
publicclassArrays{
publicstaticvoidmain(String[]args){
String[][]arr={{"济南市","滨州市","德州市"},{"沈阳市","长春市"}};
//这里arr[0]表示山东省,1表示东北省
//比如你要得到山东省就遍历
System.out.println("山东省有:");
for(inti=0;i<arr.length;i++){
System.out.print(arr[0][i]+"");
}
}
}