java - 设置大小时的java arraylist无休止循环
问题描述
我有这个代码,它只被调用一次
ArrayList<String> SendToEmails;
SendToEmails = new ArrayList<String>();
if(!environmentProduction){
SendToEmails.add(EmailAccountForTest1);
SendToEmails.add(EmailAccountForTest2);
}else{
SendToEmails.add(emailAccount);
}
SendToEmails.add("bla@bla.com");
for (int x = 0; x < SendToEmails.size(); x++) {
//send mail
}
上面的代码是一个缩短的片段。根据日志,SendToEmails 的大小是 3。但是我的代码以无限循环结束。并一遍又一遍地发送相同的邮件。
这怎么可能?
解决方案
我认为,您在循环中修改 x 。您可以尝试下一个:
int sendToEmailsSize = sendToEmails.size();
for(int x = 0; x < sendToEmailsSize; x++) {
//send emails and don`t change x
}
电子邮件列表的大小将仅计算一次,而不是在循环的每次迭代中计算。而且如果你改变列表,循环的迭代次数不会改变。
你也可以使用 forEach 循环
for(String email: sendToEmails) {
//sendEmail(email)
}
但是如果你不能在这个循环中修改列表。如果您使用的是多线程,那么如果您在另一个线程中更改列表,如果循环尚未结束,您可以获得 ConcurrentModificationException。
并使用带有小写字母的变量名
推荐阅读
- javascript - `document.querySelector('game-canvas')` 为 `null`
- python - 如何将保存在数据库中的图像渲染为模型的字段
- docker - 使用 docker compose 缩放卷
- mysql - SQL查找平均多列
- java - 如何从数组中获取值
- java - Java - 将图像作为字节 [] 放在屏幕上
- sass - 如何使用 Sass 随机格式化
- java - 在ActionPerformed之前完成主要功能?
- swiftui - 无法在 TextEditor/TextField 中显示预测键盘表情符号建议
- python - 如果对象的类是在之后定义的,如何在类中引用类对象