一个集合的遍历问题

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"??我是新手,求教大家,谢谢
...全文
159 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);
}
}
内容概要:本文提出了一种基于混沌系统与DNA编码的复合型彩色数字图像加密方案,旨在解决传统加密算法密钥空间小、抗干扰能力弱的问题。该方案利用混沌系统生成伪随机序列,结合DNA碱基编码规则对图像RGB三通道进行像素级置换与混淆扩散,实现高安全性加密;解密过程则通过逆操作精确还原原始图像。文章重点对该方案进行了系统的抗噪声与抗裁剪性能分析,实验结果表明,该算法在面对高斯噪声、椒盐噪声以及不同面积、位置的裁剪攻击时均表现出优良的鲁棒性,能够有效恢复图像核心信息,适用于网络传输与私密存储等复杂环境下的图像安全保护。; 适合人群:具备一定信号处理或信息安全基础知识,从事图像加密、信息隐藏、多媒体安全等相关领域的科研人员及研究生。; 使用场景及目标:①用于提升数字图像在网络传输中的安全性,防止窃听与篡改;②适用于医疗影像、军事测绘、商业机密等对图像安全性和抗干扰性要求较高的应用场景;③为研究高鲁棒性图像加密技术提供理论支持与实验参考。; 阅读建议:建议读者结合Matlab代码实践加密与解密流程,并自行设计不同强度的噪声与裁剪干扰实验,深入理解混沌置乱与DNA编码在提升算法鲁棒性方面的协同机制。

62,620

社区成员

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

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