Я работал с java.util.ListIterator на java.util.LinkedList ожидая, что она работает, как в этом псевдокоде:Java LinkedList ListIterator поведение
list = (1,2,3,4)
iterator.next should be 1
iterator.next should be 2
iterator.prev should be 1
iterator.next should be 2
Но порядок таков:
iterator.next is 1
iterator.next is 2
iterator.prev is 2
iterator.next is 2
Я не мог поверить, что так оно и работает, поэтому я создал тест, но он производит тот же результат. Так что я был более близкий взгляд на определение ListIterator что, конечно:
next()
Returns the next element in the list and advances the cursor position.
previous()
Returns the previous element in the list and moves the cursor position backwards.
Так что реализация является правильным, но я по-прежнему с вопросом, почему они выбрали такое поведение? Разве это не было бы намного более интуитивно, как я понял?
Вот код теста:
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import java.util.LinkedList;
import java.util.ListIterator;
public class LinkedListTest {
ListIterator<Integer> iterator;
@Before
public void setUp() throws Exception {
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i < 5; i++) {
list.add(i);
}
iterator = list.listIterator();
}
@Test
public void successfullTest() throws Exception
{
assertEquals(1, (int) iterator.next());
assertEquals(2, (int) iterator.next());
assertEquals(2, (int) iterator.previous());
assertEquals(2, (int) iterator.next());
assertEquals(3, (int) iterator.next());
assertEquals(4, (int) iterator.next());
}
@Test
public void failingTest() throws Exception
{
assertEquals(1, (int) iterator.next());
assertEquals(2, (int) iterator.next());
assertEquals(1, (int) iterator.previous());
assertEquals(2, (int) iterator.next());
assertEquals(3, (int) iterator.next());
assertEquals(4, (int) iterator.next());
}
}
Можете ли вы включить фактический код, с которым вы столкнулись, чтобы прийти к этим выводам? –
извините, здесь. – Agyss
Когда вы вызываете следующий второй раз (2), он переместит курсор на 3, так что предыдущий будет 2. Кажется логичным. –