Java цикл по списку и обратно и так далее ... какой тип списка использовать? - PullRequest
0 голосов
/ 17 марта 2012

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

Предлагает ли Java (Android) тип списка, который я могу использовать без расширения его поведения?1005 * Если нет, то как лучше всего закодировать список для этого варианта использования?

Мой текущий код выглядит примерно так:

if(!back){
    if(hasNext()){
        return next();
    } else {
        back = true;
        return previous();
    }
} else {
    if(hasPrevious()){
        return previous();
    } else {
        back = false;
        return next();
    }
}

Ответы [ 4 ]

2 голосов
/ 17 марта 2012

Используйте LinkedList для прямой и обратной навигации. Это наиболее подходит для этого.

1 голос
/ 17 марта 2012

A LinkedList это именно то, что вы ищете.По умолчанию iterator является прямым итератором, но он также предоставляет descendingIterator

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

Вы можете использовать любой тип списка, который вам нравится.Вы можете написать специализированный ForwardAndBackIterator, который реализует Iterator и инкапсулирует требуемое поведениеДобавьте это ниже.

public class ForwardAndBackIterator<T> implements Iterator<T> {
    private List<T> list;

    public ForwardAndBackIterator<T>(List<T> list) {
        this.list = list;
    }

    public boolean hasNext() {
    }

    public T next() {
    }

    public void remove(T value) {
    }
}
0 голосов
/ 17 марта 2012

С Гуава , вы можете просто сделать

for (E forwardElement : list) {
  ...
}
for (E backwardElement : Lists.reverse(list)) {
  // Lists.reverse returns a view, so it's free
  ...
}

или, если вы хотите сделать их оба в одном цикле,

for (E element : Iterables.concat(list, Lists.reverse(list))) {
  ...
}

(Внутренне это просто оборачивает ваш ListIterator и меняет направление, но использовать его вот так просто.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...