由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Java数组怎么样能参数传递 (转载)
相关主题
请问C#里面,如何对N个数组设置循环访问?C code参数传递出错可能的原因
请教一个2维动态矩阵的问题雨天哭求呀。
[合集] 一个vector的问题再问:关于多维数组的malloc
问题请教[合集] C++delete数组遇到的问题
搞不定,不得不问,一维数组跟二维数组的问题求集合包含,最快的算法是什么?
关于java的二维数组的问题请教 C/C++ 指向多维数组的指针的问题
T[ ][ ] vs T **新手学JAVA,遇到一个难题,有大侠愿意帮忙吗?
问个多维数组参数传递的问题perl二维数组一问
相关话题的讨论汇总
话题: 数组话题: java话题: 参数传递话题: 循环话题: 地址
进入Programming版参与讨论
1 (共1页)
q*******i
发帖数: 353
1
【 以下文字转载自 CS 讨论区 】
发信人: qqwuweiyi (娓娓), 信区: CS
标 题: Java数组怎么样能参数传递
发信站: BBS 未名空间站 (Wed Mar 31 22:00:20 2010, 美东)
请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么
弄?
或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b
的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和
数组b的值一样但是地址不一样。
谢谢大家啦,想了很久不知道怎么解决。
X****r
发帖数: 3557
2
你是问怎么复制一个数组吗?
Arrays.copyOf
或System.arraycopy
多维的话恐怕要自己循环一下。

b

【在 q*******i 的大作中提到】
: 【 以下文字转载自 CS 讨论区 】
: 发信人: qqwuweiyi (娓娓), 信区: CS
: 标 题: Java数组怎么样能参数传递
: 发信站: BBS 未名空间站 (Wed Mar 31 22:00:20 2010, 美东)
: 请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么
: 弄?
: 或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b
: 的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和
: 数组b的值一样但是地址不一样。
: 谢谢大家啦,想了很久不知道怎么解决。

q*******i
发帖数: 353
3
我遇到的问题是把数组作为参数传递给函数,在函数中数组值被修改同时原来的值也被
修改,有什么办法能让函数中值被修改但是原值不被修改。谢谢

【在 X****r 的大作中提到】
: 你是问怎么复制一个数组吗?
: Arrays.copyOf
: 或System.arraycopy
: 多维的话恐怕要自己循环一下。
:
: b

X****r
发帖数: 3557
4
那不就是把数组复制后的结果传进去吗,这样原来那份就不会被修改了。

【在 q*******i 的大作中提到】
: 我遇到的问题是把数组作为参数传递给函数,在函数中数组值被修改同时原来的值也被
: 修改,有什么办法能让函数中值被修改但是原值不被修改。谢谢

q*******i
发帖数: 353
5
我是先把数组拷贝(比如把数组a copy 给b),然后把b整个数组作为参数传递到函数
中,在函数内数组b的值被修改了,于此同时函数外a的值也被自动修改了(因为是地址
拷贝),但是我希望保持a不变,怎么操作?

【在 X****r 的大作中提到】
: 那不就是把数组复制后的结果传进去吗,这样原来那份就不会被修改了。
X****r
发帖数: 3557
6
你怎么拷贝的?b = a; ?这样不是拷贝,而是aliasing。如果你是多维数组的话光
调用一个Arrays.copyOf也不够,得自己循环调用它来复制才行。

【在 q*******i 的大作中提到】
: 我是先把数组拷贝(比如把数组a copy 给b),然后把b整个数组作为参数传递到函数
: 中,在函数内数组b的值被修改了,于此同时函数外a的值也被自动修改了(因为是地址
: 拷贝),但是我希望保持a不变,怎么操作?

q*******i
发帖数: 353
7
对,我发现就是循环复制才行,但是数组维数一高,循环复制岂不是效率太低。想问有
没有更高效的办法解决这个问题

【在 X****r 的大作中提到】
: 你怎么拷贝的?b = a; ?这样不是拷贝,而是aliasing。如果你是多维数组的话光
: 调用一个Arrays.copyOf也不够,得自己循环调用它来复制才行。

X****r
发帖数: 3557
8
循环复制的效率和数组的维数关系不大,主要和数组的总元素个数成正比,除非你的每
个维度都只有一两个元素,而有上百个维度,不然不会效率太低。
当然你可以用一维数组来模拟多维数组。Java的多维数组允许子数组的大小不同。
如果你不用这个特性的话直接用一维数组而自己来算下标也是可以的。

【在 q*******i 的大作中提到】
: 对,我发现就是循环复制才行,但是数组维数一高,循环复制岂不是效率太低。想问有
: 没有更高效的办法解决这个问题

q*******i
发帖数: 353
9
我就是一个m*n的二维数组,但是m和n都很大,这样即使用两个for循环来复制效率也不
低。对吧?除此之外实在想不到什么办法改变新值而原值不变了

【在 X****r 的大作中提到】
: 循环复制的效率和数组的维数关系不大,主要和数组的总元素个数成正比,除非你的每
: 个维度都只有一两个元素,而有上百个维度,不然不会效率太低。
: 当然你可以用一维数组来模拟多维数组。Java的多维数组允许子数组的大小不同。
: 如果你不用这个特性的话直接用一维数组而自己来算下标也是可以的。

X****r
发帖数: 3557
10
为什么要用两个for循环呢?一个for循环里面套一个Arrays.copyOf就行了啊。

【在 q*******i 的大作中提到】
: 我就是一个m*n的二维数组,但是m和n都很大,这样即使用两个for循环来复制效率也不
: 低。对吧?除此之外实在想不到什么办法改变新值而原值不变了

相关主题
关于java的二维数组的问题C code参数传递出错可能的原因
T[ ][ ] vs T **雨天哭求呀。
问个多维数组参数传递的问题再问:关于多维数组的malloc
进入Programming版参与讨论
q*******i
发帖数: 353
11
明白了,这样效率是比两个for循环高很多吗?

【在 X****r 的大作中提到】
: 为什么要用两个for循环呢?一个for循环里面套一个Arrays.copyOf就行了啊。
t****t
发帖数: 6806
12
唉, 我不会java都看明白了
copy一维数组, 用copyblahblah method
copy二维数组, 用一重循环加copyblahblah method, 因为二维数组是一维数组的一维
数组

【在 q*******i 的大作中提到】
: 明白了,这样效率是比两个for循环高很多吗?
g*****g
发帖数: 34805
13
通常一维数组地址连续,二维不是。
跟你说了半天调N次arraycopy就行,不能理解我也没办法了。

【在 q*******i 的大作中提到】
: 明白了,这样效率是比两个for循环高很多吗?
X****r
发帖数: 3557
14
改善一个常系数而已,不影响时间复杂度,但是不用白不用,代码还简洁些。

【在 q*******i 的大作中提到】
: 明白了,这样效率是比两个for循环高很多吗?
k*******d
发帖数: 701
15
System.arraycopy()
example
int[] original = new int[] {71, -4, 7220, 0, 238};
int[] copy = new int[original.length];
System.arraycopy(original, 0, copy, 0, original.length);
It is a native method, very efficient!!
s***8
发帖数: 1136
16
deep clone.
However, it's usually not a good idea to modify something passed in as a
param as side effect
1 (共1页)
进入Programming版参与讨论
相关主题
perl二维数组一问搞不定,不得不问,一维数组跟二维数组的问题
[合集] 一道C++的面试题,双黄包求答案 (转载)关于java的二维数组的问题
在C/Fortran之间传递2维数组T[ ][ ] vs T **
[合集] 怎样有效的传递C静态数组的变量名?问个多维数组参数传递的问题
请问C#里面,如何对N个数组设置循环访问?C code参数传递出错可能的原因
请教一个2维动态矩阵的问题雨天哭求呀。
[合集] 一个vector的问题再问:关于多维数组的malloc
问题请教[合集] C++delete数组遇到的问题
相关话题的讨论汇总
话题: 数组话题: java话题: 参数传递话题: 循环话题: 地址