как перебрать список байтовых массивов ...? - PullRequest
1 голос
/ 08 марта 2012

если у меня есть список байтовых массивов, и я хочу удалить массив, если первый индекс является конкретным значением, как бы я использовал что-то вроде этого:

bytearrays.removeAll(Collections.singletonList(-7));

если это невозможно, как лучше всего это сделать? Я пытался использовать итераторы, но я не думаю, что понимаю их достаточно, чтобы заставить его проверять первый индекс каждого массива в списке массивов ...

Когда я просто создаю цикл for, по какой-то причине некоторые массивы не удаляются (обычно последний массив, иногда последние 2, в зависимости от количества массивов).

Ответы [ 3 ]

4 голосов
/ 08 марта 2012

В большинстве списков есть итератор, который правильно реализует метод 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();
    }
}
2 голосов
/ 08 марта 2012

Ваша основная проблема заключается в том, что вы переходите от первого к (последнему-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); 
    }
}

Я не уверен, почему вы удаляете первый элемент массива независимо от других условий, но вы можете добавить эту строку перед циклом,если вам нужно.

0 голосов
/ 08 марта 2012

Вы не должны удалять из списка при его повторении, потому что удаление записи приводит к изменению списка - он сдвигает остальную часть списка, а также изменяется размер списка.Вам лучше использовать итератор для удаления.В любом случае, обратите внимание, что если вы повторяете цикл с циклом, что его условие остановки соответствует длине списка, то учтите, что оно меняется.Это также решается методом hasNext () Итератора.

...