Java 从ArrayList中删除项目<;ArrayList<;T>&燃气轮机&燃气轮机;
在下面的代码中,我想在第一个“for循环”中从arraylist中删除null或arraylist大小为零的项。在运行第一个循环之后,我又有了第二个循环。在第二个循环中,我测试了它是否包含任何为null的项或项的大小为零的项。虽然我在第一个循环中删除了,但ArrayList BS包含从列表中删除的项Java 从ArrayList中删除项目<;ArrayList<;T>&燃气轮机&燃气轮机;,java,list,arraylist,Java,List,Arraylist,在下面的代码中,我想在第一个“for循环”中从arraylist中删除null或arraylist大小为零的项。在运行第一个循环之后,我又有了第二个循环。在第二个循环中,我测试了它是否包含任何为null的项或项的大小为零的项。虽然我在第一个循环中删除了,但ArrayList BS包含从列表中删除的项 ArrayList<ArrayList<Record>> BS = new ArrayList<>(); . .// some codes . for (in
ArrayList<ArrayList<Record>> BS = new ArrayList<>();
.
.// some codes
.
for (int j = 0; j < BS.size(); j++) {
if(BS.get(j) == null || BS.get(j).size() == 0){
BS.remove(j);
}
}
for (int j = 0; j < BS.size(); j++) {
if(BS.get(j) == null || BS.get(j).size() == 0){
System.out.println("Again, fall into if condition");
}
}
ArrayList BS=new ArrayList();
.
.//一些代码
.
对于(int j=0;j
您遇到的问题是,您不会在删除项目后立即检查该项目
要么:
BS.removeIf(a -> a == null || a.isEmpty());
或者反向迭代列表:
for (int j = BS.size() - 1; j >= 0; j--) { ... }
或者使用迭代器
,并使用remove()
方法
Iterator<? extends List<Record>> it = BS.iterator();
while (it.hasNext()) {
List<Record> list = it.next();
if (list == 0 || list.isEmpty()) it.remove();
}
Iterator这里的问题是,您不会在删除项目后立即检查该项目
要么:
BS.removeIf(a -> a == null || a.isEmpty());
或者反向迭代列表:
for (int j = BS.size() - 1; j >= 0; j--) { ... }
或者使用迭代器
,并使用remove()
方法
Iterator<? extends List<Record>> it = BS.iterator();
while (it.hasNext()) {
List<Record> list = it.next();
if (list == 0 || list.isEmpty()) it.remove();
}
Iterator问题是当一个项被删除时,如果条件为真,下一个项将不会被删除。为此,在删除项目时,应减小索引
更改如下
ArrayList<ArrayList<Record>> BS = new ArrayList<>();
.
.// some codes
.
for (int j = 0; j < BS.size(); j++) {
if(BS.get(j) == null || BS.get(j).size() == 0){
BS.remove(j);
j--;
}
}
ArrayList BS=new ArrayList();
.
.//一些代码
.
对于(int j=0;j
问题是,当一个项目被删除时,如果条件为真,下一个项目将不会被删除。为此,在删除项目时,应减小索引
更改如下
ArrayList<ArrayList<Record>> BS = new ArrayList<>();
.
.// some codes
.
for (int j = 0; j < BS.size(); j++) {
if(BS.get(j) == null || BS.get(j).size() == 0){
BS.remove(j);
j--;
}
}
ArrayList BS=new ArrayList();
.
.//一些代码
.
对于(int j=0;j
从数组中删除项时,通常需要从最后一项转到第一项,否则每次删除时,索引都会跳转一项
这是因为移除一个项目会将其余项目移回一个位置,即从位置“j+1”移到位置j。因此,下一个循环跳过项目a位置j(即上一个循环中处于位置j+1的项目)
试试这个:
for (int j = BS.size() - 1; j >= 0; j--) {
if(BS.get(j) == null || BS.get(j).size() == 0){
BS.remove(j);
}
}
从数组中删除项时,通常要从最后一项转到第一项,否则每次删除时,索引都会跳转一项
这是因为移除一个项目会将其余项目移回一个位置,即从位置“j+1”移到位置j。因此,下一个循环跳过项目a位置j(即上一个循环中处于位置j+1的项目)
试试这个:
for (int j = BS.size() - 1; j >= 0; j--) {
if(BS.get(j) == null || BS.get(j).size() == 0){
BS.remove(j);
}
}