如果我有一个字节数组列表,并且我想删除一个数组,如果第一个索引是一个特定的值,我将如何使用这样的东西:
bytearrays.removeAll(Collections.singletonList(-7));
如果不可能,那么最好的方法是什么?我已经尝试过使用迭代器,但我认为我不够理解它们能够强制它检查数组列表中每个数组的第一个索引......
当我简单地创建一个for循环时,由于某种原因,某些数组不会被删除(通常是最后一个数组,有时最后一个数组取决于有多少数组)。
答案 0 :(得分:4)
大多数列表都有一个正确实现remove
方法的迭代器。
鉴于最简单的解决方案如下:
final Iterator<byte[]> iter = bytearrays.iterator();
while (iter.hasNext()) {
final byte[] temp = iter.next();
// TODO check for zero-length arrays
if (temp[0] == -7) {
iter.remove();
}
}
答案 1 :(得分:2)
您的主要问题是您从数组中的第一个元素循环到(last-2)元素,但是当您删除元素时,所有其他元素都会移位。相反,您应该以相反的顺序循环:
for(int z = bytearray.size() - 1; z >=0 ; z--)
{
byte[] temp = bytearrays.get(z);
if(temp[0] == -16 || temp[0] == -11 || temp[0] == -7)
{
bytearrays.remove(z);
}
}
我不确定为什么你要移除数组的第一个元素而不考虑其他条件,但如果你需要,可以在循环之前添加该行。
答案 2 :(得分:0)
在迭代它时不应该从List中删除导致删除条目导致List更改 - 它会移动列表的其余部分,因此列表的大小也会更改。您最好使用Iterator删除。无论如何,要注意如果你用一个循环迭代它的停止条件在列表的长度上然后考虑它改变。这也可以通过Iterator的hasNext()方法解决。