fvg*_*vgs 30 java reference arraylist pass-by-reference
简单地说,我有一个带有ArrayList参数的方法.在方法中,我修改ArrayList的内容,仅用于与方法返回的内容相关的目的.因此,我不希望作为参数传递的ArrayList完全受到影响(即不作为引用传递).
我尝试的一切都未能达到预期的效果.我需要做什么才能在方法中使用ArrayList的副本,但不能更改实际变量?
Avi*_*Avi 44
即使你有办法将数组列表作为副本传递而不是通过引用,它也只是一个浅拷贝.
我会做的事情如下:
void foo(final ArrayList list) {
ArrayList listCopy = new ArrayList(list);
// Rest of the code
}
Run Code Online (Sandbox Code Playgroud)
只需处理复制的列表.
bch*_*iej 18
您可以使用ArrayList的复制构造函数创建ArrayList的副本:
ArrayList copy = new ArrayList(original);
Run Code Online (Sandbox Code Playgroud)
但是,如果列表的元素也是对象,那么您必须意识到修改副本的成员也将修改原始成员.
您可以通过Collections#unmodifiableList(yourList)以发送列表的不可修改副本。顺便说一下,List<Whatever>由于Java总是按值传递,因此您是按值传递的,请注意,在foo(List<Whatever> list)方法中您不能修改该list值,但可以修改其内容。
public class MyClass {
List<Whatever> list = new ArrayList<Whatever>();
public void bar() {
//filling list...
foo(Collections.unmodifiableList(list));
}
public void foo(List<Whatever> list) {
//do what you want with list except modifying it...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45206 次 |
| 最近记录: |