一个集合的遍历问题

ewind72000 2010-01-06 03:03:00
List<String> l=new ArrayList<String>();
l.add("m");
l.add("k");
l.add("s");

for(String e:l){
if(e.equals("m")){
e="h";
}
}

为什么以上这段程序没法把集合中的"m"改成"h"??我是新手,求教大家,谢谢
...全文
158 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ewind72000 2010-01-06
  • 打赏
  • 举报
回复
谢谢ltandfyy!我找到了类似的知识了http://www.javaeye.com/topic/412531
shz0427 2010-01-06
  • 打赏
  • 举报
回复
jf
ltandfyy 2010-01-06
  • 打赏
  • 举报
回复
类似吧!String做参数时,在方法内部想改变这个参数的值,但没收藏帖这个习惯,找不到了!
ewind72000 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ltandfyy 的回复:]
我大概明白LZ的意思了,可能如果List里放的是对象的话,从List中取出这个对象,改变这个对象里某个字段的值,因为一直是引用,不用再把这个对象放回到List中,就已经完成了修改操作,可是String有点特殊,这个在论坛中都讨论过,我就不班门弄斧了,简单说,这样的引用是不能改变List中原String值的,只能替换!
[/Quote]

??论坛中有这样的帖子吗?能告诉我个地址吗?谢谢
孤独剑客 2010-01-06
  • 打赏
  • 举报
回复
学习, 路过
存在666 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ewind72000 的回复:]
为什么foreach不能得到数组下标呢?ls能给我说说吗?谢谢
[/Quote]
这个是JDK1.5后才有的功能,只能把里面的东西全打出来,但想要拿到其中的一个数是不行,只能用老版式的
for(...;...;...)这样!
ltandfyy 2010-01-06
  • 打赏
  • 举报
回复
我大概明白LZ的意思了,可能如果List里放的是对象的话,从List中取出这个对象,改变这个对象里某个字段的值,因为一直是引用,不用再把这个对象放回到List中,就已经完成了修改操作,可是String有点特殊,这个在论坛中都讨论过,我就不班门弄斧了,简单说,这样的引用是不能改变List中原String值的,只能替换!
ewind72000 2010-01-06
  • 打赏
  • 举报
回复
为什么foreach不能得到数组下标呢?ls能给我说说吗?谢谢
junjun1984 2010-01-06
  • 打赏
  • 举报
回复
e="h";
只能改变e=h
你要改变list中的m为h,那就不能用foreach循环了。因为它得不到数组下标的。
你可以改成For循环。得到m的当前下标,替换成h就可以了。
ewind72000 2010-01-06
  • 打赏
  • 举报
回复
我是想问这种foreach循环是什么原理?为什么没法把List集合中的"m"改成"h"?
for(String e:l){
if(e.equals("m")){
e="h";
}
这句不是把集合l中的每一个引用的地址依次给e吗?
那改动e的值不就是改集合中的那个元素的值吗?
paulexcellent 2010-01-06
  • 打赏
  • 举报
回复
for (int i = 0; i < l.size(); i++) {
String value = l.get(i);
if ("m".equals(value)) {
l.remove(i);
l.add("h");
}
}
junjun1984 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kamiomisuzu01 的回复:]
话说String e:l
这个写法什么意思啊。。。。能这么干么?
[/Quote]
类似于for循环 但有别于for循环。
ltandfyy 2010-01-06
  • 打赏
  • 举报
回复
3楼的少写了判断
l.get(j).equals("m"); --> if(l.get(j).equals("m"))
基本应该符合LZ的意思了
回4楼,String e:l
能这么干,看你JDK版本
phyerbarte 2010-01-06
  • 打赏
  • 举报
回复
l.set(j, "h");
哦no..打下小抄。
kamiomisuzu01 2010-01-06
  • 打赏
  • 举报
回复
话说String e:l
这个写法什么意思啊。。。。能这么干么?
xiaopaopao 2010-01-06
  • 打赏
  • 举报
回复

public class Test {
public static void main(String[] args) {

List<String> l = new ArrayList<String>();
l.add("m");
l.add("k");
l.add("s");
int i = 0;
for (int j = 0; j < l.size(); j++) {
l.get(j).equals("m");
l.set(j, "h");
}

}

}

wyj1983 2010-01-06
  • 打赏
  • 举报
回复
改过来了啊 for循环里 你打印下 System.out.println(e);
phyerbarte 2010-01-06
  • 打赏
  • 举报
回复
是否要保持内部顺序,不保持这样就行了,先来一个

public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("m");
l.add("k");
l.add("s");

for (int i = 0; i < l.size(); i++) {
String value = l.get(i);
if ("m".equals(value)) {
l.remove(i);
l.add("h");
}
}
for (String e : l) {
System.out.println(e);
}
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧