7 java foreach pointers arraylist
好的,所以我想要迭代一个ArrayList并删除一个specefic元素.但是,我在使用For-Each之类的结构时遇到了一些麻烦.当我运行以下代码时:
ArrayList<String> arr = new ArrayList<String>();
//... fill with some values (doesn't really matter)
for(String t : arr)
{
t = " some other value "; //hoping this would change the actual array
}
for(String t : arr)
{
System.out.println(t); //however, I still get the same array here
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何使't'成为'arr'的指针,以便我能够在for-each循环中更改值?我知道我可以使用不同的结构循环遍历ArrayList,但是这个看起来非常干净和可读,能够使't'成为指针会很好.
所有评论都表示赞赏!即使你说我应该吮吸它并使用不同的结构.
Mic*_*ick 16
我认为最好的方法可能是使用for循环.
ArrayList<String> arr = new ArrayList<String>();
for (int i = 0; i < arr.size(); i++) {
String t = arr.get(i);
if (// your condition is met) {
arr.set(i, "your new value");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您正在尝试更改循环范围的引用, t以使其指向新的String实例.这不会起作用.它没有引用arraylist中的实际条目.您需要更改引用的实际值.如果String是可变的并且set()为此提供了一种虚拟方法,那么理论上可以这样做
for (String t : arr) {
t.set("some other value");
}
Run Code Online (Sandbox Code Playgroud)
左右,但这是不可能的,因为它是不可变的.最好使用普通for循环来获取数组本身中入口点的句柄:
for (int i = 0; i < arr.size(); i++) {
arr.set(i, "some other value");
}
Run Code Online (Sandbox Code Playgroud)
如果你坚持使用增强型for循环,那么你需要替换String为StringBuilder,这是可变的:
for (StringBuilder t : arr) {
t.delete(0, t.length()).append("some other value");
}
Run Code Online (Sandbox Code Playgroud)
请记住,Java是按值传递,而不是按引用传递.
| 归档时间: |
|
| 查看次数: |
4062 次 |
| 最近记录: |