我有两个字符串列表,listA
和listB
。 listA
更长,我想通过添加空字符串使listB
具有相同的大小。
这有效:
int diff = listA.size() - listB.size()
for (int i = 0; i < diff; i++) {
listB.add("");
}
但这不是:
for (int i = 0; i < (listA.size() - listB.size()); i++) {
listB.add("");
}
这是为什么?
变量diff
的第一个示例是常量,而第二个示例是在循环的每次迭代中计算条件,因此,因为您在迭代期间添加对象,所以列表的大小将会改变,因此两个代码片段不会相同事情。
我建议你继续第一种方法,即事先缓存循环条件的限制,而不是在每次迭代期间重新评估它。
当您向listB
添加新值时,大小将递增,因此在每个循环中,for循环重新评估listB
的大小以查找条件是否为false
以停止循环。在这种情况下,条件将永远是true
,因为您将新元素添加到列表中
每次调用list.add(“”)时,List的大小都会递增
所有(list.size() - list.size())每次通过迭代都会计算列表i的新大小。 e listB获得新的大小。
从您的代码段diff ==您要将项目添加到listB的剩余大小
选项1可以。
其他答案已经解释了为什么你的第二个循环不起作用。
我想建议一种替代方法,通过使用Collections.nCopies
和List.addAll
来消除循环:
if (listA.size() - listB.size() > 0) {
listB.addAll(Collections.nCopies(listA.size() - listB.size(), ""));
}
要么
int diff = listA.size() - listB.size();
if (diff > 0) {
listB.addAll(Collections.nCopies(diff, ""));
}