2013-08-13 5 views
-1

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

int index = 0; 
for(int i = 0; i < list.size(); ++i) { 
    if(list.isProperty()) list.delete(index) //We delete the element at list[index] 
    else ++index; 
} 

Может быть, это не те реальные методы интерфейса списка в Java, но они вполне очевидны.

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

+2

двунаправленных списков есть O (1) раз делеции, как это просто установка ссылок по-разному. – hexafraction

+0

Существует ли реализация двусвязных списков в java-библиотеках? Я не смог его найти. Я действительно искал что-то подобное. Как и std :: list из C++ – Setzer22

+0

[LinkedList] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/LinkedList.html) на самом деле дважды связан с беглым рассмотрением javadoc. – hexafraction

ответ

2

Вы можете добиться этого, используя iterator.Without с одновременным исключением модификации.

Произнесите список состоит из объекта A

List<A> list = new ArrayList<A>(); 

Iterator<A> iterator = list.iterator(); 
while (iterator.hasNext()) { 
    A current = iterator.next(); 

    if(current.isProperty()) { 
    iterator.remove();; 
    } 
} 
+1

+1 Вы также можете использовать цикл for вместо цикла while, чтобы ограничить область действия Iterator –

+0

Просто из любопытства, это то, что мне интересно. Есть ли какое-либо преимущество, имеющее ширину итератора? @PeterLawrey – Bren

+1

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

1

Вы должны удалить элемент из списка, используя Iterator. Вы можете использовать это с ArrayList.

List<YourDataType> yourList = new ArrayList<YourDataType>(); 
Iterator<YourDataType> it = yourList.iterator(); 
while (it.hasNext()) 
     it.remove(); 

С этим вы можете использовать if-else, чтобы указать элемент, который необходимо удалить.

This должен дать вам несколько советов, почему вы должны использовать Итератор.

Смежные вопросы