2015-01-31 7 views
0

Я хочу найти данные непосредственно перед данным куском данных. Например, у вас есть список имен:Прохождение через LinkedList странным способом?

Bob, Tommy, Scott, Frank, Evan, Ryan, Jessy, Alex, Abner, Edward, Smith, Adam 

гипотетический метод Find() передается имя, и немедленно возвращает имя перед ним, последовательно.

Например, вы запустите find (Ryan), который имеет желаемый результат возвращения Evan. Как бы вы это сделали? Поскольку нет итератора, я не уверен, как это будет сделано.

+2

Считаете ли вы использование 'ListIterator'? – fge

ответ

4

Вот простой фрагмент кода, который будет исправить ваш вопрос

LinkedList<String> yourListWithName = new LinkedList<String>(); 
//Fill your list 

ListIterator<String> listIterator = yourListWithName.listIterator(); 

String previous = null; 

while(listIterator.hasNext()) { 

    if(listIterator.hasPrevious()) 
    { 

     previous = listIterator.previous(); 
     listIterator.next(); 
    } 

    String current = listIterator.next(); 

    if(current.equals(yourReceivedName)) 
     //Your algorithm 
} 
3

Один из вариантов заключается в использовании indexOf:

public String find(List<String> names, String name) { 
    int index = names.indexOf(name); 
    return index > 0 ? names.get(index - 1) : null; 
} 

Однако это довольно неэффективно, поскольку оба indexOf и get требуют итерации. Для относительно небольших списков это вряд ли будет проблемой.

+0

@ Jean-FrançoisSavard да это http://developer.classpath.org/doc/java/util/LinkedList-source.html – sprinter

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